我有一个 pandas 数据框,我想创建一个新列,该列对不同的行组进行不同的计算。这是一个简单的例子:
import pandas as pd
data = {'foo': list('aaade'), 'bar': range(5)}
df = pd.DataFrame(data)
数据框如下所示:
bar foo
0 0 a
1 1 a
2 2 a
3 3 d
4 4 e
现在我正在添加一个新列并尝试为选定的行分配一些值:
df['xyz'] = 0
df.loc[(df['foo'] == 'a'), 'xyz'] = df.loc[(df['foo'] == 'a')].apply(lambda x: x['bar'] * 2, axis=1)
数据框没有改变。我希望数据框看起来像这样:
bar foo xyz
0 0 a 0
1 1 a 2
2 2 a 4
3 3 d 0
4 4 e 0
在我的实际问题中,“xyz”列也为其他行计算,但使用不同的函数。事实上,我也在使用不同的列进行计算。所以我的问题:
- 为什么上面示例中的分配不起作用?
- 是否需要做
df.loc[(df['foo'] == 'a')
两次(就像我现在做的那样)?