我想在我的数据框中添加一个新列。我有一个事件列表,如果其中任何一个与 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 数组(一个用 TrueFalse 值填充的向量)。它选择返回值为 True 的所有行。通常,使用 bool 数组进行切片是操作数据帧的最有效方法。

    关于python - Pandas - 数据框 - 条件添加,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57495490/

    10-09 07:29
    查看更多