我想在我的数据框中添加一个新列。我有一个事件列表,如果其中任何一个与 0 不同,则新列中该行的值应为 1。
我认为它应该非常简单,但我对 python 相当陌生。
数据框如下所示:
df = pd.DataFrame({"ID":[1,1,2,3],"Date":["01/01/2019","01/01/2019","02/01/2019","02/01/2019"],"Event_1":[1,0,0,0],"Event_2":[1,0,0,1],"Event_3":[0,1,0,1],"Other":[0,0,0,1]})
print(df)
ID Date Event_1 Event_2 Event_3 Other
1 01/01/2019 1 1 0 0
1 01/01/2019 0 0 1 0
2 02/01/2019 0 0 0 0
3 02/01/2019 0 1 1 1
应该是这样的:
ID Date Event_1 Event_2 Event_3 Other Conditional_row
1 01/01/2019 1 1 0 0 1
1 01/01/2019 0 0 1 0 1
2 02/01/2019 0 0 0 0 0
3 02/01/2019 0 1 1 1 1
最简单的方法是什么?哪个最好?
最佳答案
假设您的数据框存储在名为 df
的对象中。我相信这是最有效的方法:
df["Conditional_row"] = 0
df.loc[df[["Event_1","Event_2","Event_3","Other"]].sum(axis=1) > 0, "Conditional_row"] = 1
输出如下所示:
print(df)
ID Date Event_1 Event_2 Event_3 Other Conditional_row
0 1 01/01/2019 1 1 0 0 1
1 1 01/01/2019 0 0 1 0 1
2 2 02/01/2019 0 0 0 0 0
3 3 02/01/2019 0 1 1 1 1
我在这里做的是:
["Event_1","Event_2","Event_3","Other"]
中列的行总和大于 1 的所有行。 "Conditional_row"
列更新为值 1。 代码
df[["Event_1","Event_2","Event_3","Other"]].sum(axis=1) > 0
称为 mask
,它返回一个 bool 数组(一个用 True
和 False
值填充的向量)。它选择返回值为 True
的所有行。通常,使用 bool 数组进行切片是操作数据帧的最有效方法。关于python - Pandas - 数据框 - 条件添加,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57495490/