我想在pandas中使用assign,在pandas查询后传递字典理解。
可重复的示例:
import pandas as pd
df = pd.DataFrame({
"a": [1, 2, 3],
"b": [4, 5, 6],
"weight": [0.1, 0.2, 0.3]
})
metrics = ["a", "b"]
df = df.query("b > 4").assign(
**{
f"weighted_{metric}": lambda df: df[metric] * df["weight"]
for metric in metrics
}
)
print(df)
结果:
a b weight weighted_a weighted_b
1 2 5 0.2 1.0 1.0
2 3 6 0.3 1.8 1.8
我没有得到预期的结果,对于a,我应该得到0.2,0.3。
你知道我怎样才能得到正确的weighted_a吗?
我在here中问了一个类似的问题,那里的解决方案工作得很好,但以前没有查询。有没有想过如何以流水线的方式调整另一个问题的答案?
请记住,对于我的用例,可能会使用一个比乘法更复杂的函数。
1条答案
按热度按时间rjee0c151#
你必须将
metric
作为参数传递给lambda,否则它将采用最后一次出现的值:输出: