考虑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]
我的代码片段如下所示:
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
我已按照建议将列转换为 Object
类型 here但仍然有错误。
我可以推断的是,pandas 正在尝试遍历列表的元素,并将这些值中的每一个分配给单元格,而我试图将整个列表分配给满足条件的所有单元格。
有什么方法可以按上述方式分配列表吗?
最佳答案
另一种解决方案是创建 Series
并用 list
填充 shape
用于生成 df
的 length
:
df.loc[(df['A'] > 1) & (df['B'] > 1), "D"] = pd.Series([[1,0]]*df.shape[0])
df.loc[(df['A'] == 1) , "D"] = pd.Series([[0,2]]*df.shape[0])
df.loc[(df['A'] == 2) & (df['C'] != 0) , "D"] = pd.Series([[2,0]]*df.shape[0])
print (df)
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]
关于python - 将列表插入满足列条件的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39717809/