【发布时间】:2017-02-04 16:20:34
【问题描述】:
考虑df
A B C
0 3 2 1
1 4 2 3
2 1 4 1
3 2 2 3
我想添加另一列 "D" 以便 D 根据 "A"、"B" 和 "C" 的条件包含不同的列表
A B C D
0 3 2 1 [1,0]
1 4 2 3 [1,0]
2 1 4 1 [0,2]
3 2 2 3 [2,0]
我的代码 sn-p 看起来像:
df['D'] = 0
df['D'] = df['D'].astype(object)
df.loc[(df['A'] > 1) & (df['B'] > 1), "D"] = [1,0]
df.loc[(df['A'] == 1) , "D"] = [0,2]
df.loc[(df['A'] == 2) & (df['C'] != 0) , "D"] = [2,0]
当我尝试运行此代码时,它会引发以下错误:
ValueError: Must have equal len keys and value when setting with an iterable
我已按照here 的建议将该列转换为Object 类型,但仍然出现错误。
我可以推断的是,pandas 正在尝试迭代列表的元素并将这些值中的每一个分配给单元格,而我试图将整个列表分配给符合条件的所有单元格。
有什么方法可以按上述方式分配列表吗?
【问题讨论】: