【发布时间】:2020-06-16 19:49:48
【问题描述】:
我需要根据名为 X 的列的值(1,2,3,4,5)为新列 Y 中的行分配布尔值。
我在数据集中有此列df:
X
1
1
1
3
2
5
2
4
1
我想要一个新的 Y,在一个新的数据集中,它是 df 的副本,其中:
- 如果行的 X 值 = 1 则为真
- 如果行的 X 值 = 2 则为 False
- 如果行的 X 值 = 3,则为 False
- 如果行的 X 值 = 4 则为真
- 如果行的 X 值 = 5 则为 False
所以我应该有
X Y
1 true
1 true
1 true
3 false
2 false
5 false
2 false
4 true
1 true
我写了这段代码:
new_df=df.copy()
new_df['Y'] = False
for index in df.iterrows():
if df['X'] == 1:
new_df.iloc[index,9] = True
elif df['X'] == 2:
new_df.iloc[index,9] = False
elif df['X'] == 3:
new_df.iloc[index,9] = False
elif df['X'] == 4:
new_df.iloc[index,9] = True
else:
new_df.iloc[index,9] = False
得到这个错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
您能帮我修复代码以获得预期的输出吗?谢谢
【问题讨论】:
-
stackoverflow.com/questions/19913659/… 向您展示了如何根据多个条件有条件地创建列。但是,在您提供的示例中,这些都不是必需的,因为您的逻辑可以简化为“
True如果 X 为 1 或 4,False否则”,这是一个简单的df['X'].isin([1, 4]) -
谢谢。我没有看那个问题。非常有帮助
-
我将您的评论添加到我的答案中,因为它确实提供了非常有用的简化@ALollz 谢谢!