python - 将列表插入满足列条件的单元格

标签 python pandas

考虑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用于生成 dflength:

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/

相关文章:

python - django 通过 LDAP 进行用户身份验证

python - 如何从python知道sftp中的当前工作目录

python - 在python中设置Logistic回归的精确迭代次数

html - 如何更改 IPython 笔记本中的 DataFrame 打印样式

python - Pandas 测试一列是否是另一列的子集? (即 B 列包含 A 列)

Python pandas 两列索引和区域。该地区有州,其下有城镇。我需要一个显示相应状态的新列

Python 变量作用域和 .var

python - 用 null python pandas 替换 NaN

python - 关键错误 - 旋转数据框时

python - map (lambda x : int(x, 16)/256.0,[颜色[1 :3],颜色[3 :5],颜色[5:7]])