![](/img/trans.png)
[英]Select a column in which all variable values meet the conditions in the cells
[英]Insert list into cells which meet column conditions
考虑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
类型但仍有错误。
我可以推断的是,大熊猫正试图迭代列表的元素,并将每个值分配给单元格,因为我试图将整个列表分配给符合条件的所有单元格。
有什么方法可以用上面的方式分配列表吗?
另一个解决方案是创建由list
填充的Series
,其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]
免责声明 :这是我自己的问题。
这两个答案都是由jezrael和piRSquared提供的。
我只是想添加另一种方法,尽管与我在问题中发布的要求略有不同。 您可以将list
转换为string
,然后通过类型转换访问它,而不是尝试插入list
。
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]'
这可能不适用于每个人的使用,但我绝对可以想到这就足够了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.