python - 根据给定条件向现有数据框添加多个新列

标签 python pandas dataframe

我有一个具有以下列名称的数据框,我想根据原始数据框创建新列(n_1、n_2、n_3 n_4、n_5、n_6、n_7、n_8)给定条件。条件是为数据框中的每个唯一的 EVENT_ID 创建新列。检查 SELECTION_TRAP 列中值为 1 的行,获取与该行对应的 BSP 值,并将其插入到 n_1 中>,如果 SELECTION_TRAP 值为 2,则将与该行对应的 BSP 插入到 n_2 中。同样适用于n_3、n_4、n_5、n_6、n_7、n_8

EVENT_ID    BSP   SELECTION_TRAP    
174331755   34.00   1
174331755   5.18    2
174331755   3.30    7
174331755   70.00   4
174331755   19.10   3
174331755   13.00   6
174331755   2.96    8       
174329130   14.00   5
174329130   8.20    7
174329130   3.65    1
174329130   3.15    4
174329130   7.20    2
174329130   13.50   8
174339802   160.00  3
174339802   47.57   7
174339802   88.01   8
174339802   1.58    5
174339802   268.86  2
174339802   19.14   4
174339802   4.66    1
174339802   17.77   6

预期输出:

EVENT_ID      n_1    n_2       n_3     n_4     n_5    n_6     n_7     n_8
174331755    34.00   5.18     19.10   70.00    0.00   13.00   3.30    2.96
174329130    3.65    7.20     0.00    3.15     14.00  0.00    8.20    13.50
174339802    4.66    268.86   160.00  19.14    1.58   17.77   47.57   88.01

我尝试了下面的代码,但输出与我的预期输出相差甚远。我可以找到一个可以用来尽快实现此目的的 pandas 函数。我需要你的帮助。谢谢

for j,n in enumerate(new.index):
    if df['SELECTION_TRAP'].values[j] == 1:
        df['1'] = df['BSP'].values[j]
    elif df['SELECTION_TRAP'].values[j] == 2:
        df['2'] = df['BSP'].values[j]
    elif df['SELECTION_TRAP'].values[j] == 3:
        df['3'] = df['BSP'].values[j]
    elif df['SELECTION_TRAP'].values[j] == 4:
        df['4'] = df['BSP'].values[j]
    elif df['SELECTION_TRAP'].values[j] == 5:
        df['5'] = df['BSP'].values[j]
    elif df['SELECTION_TRAP'].values[j] == 6:
        df['6'] = df['BSP'].values[j]
    elif df['SELECTION_TRAP'].values[j] == 7:
        df['7'] = df['BSP'].values[j]
    elif df['SELECTION_TRAP'].values[j] == 8:
        df['8'] = df['BSP'].values[j]
    else:
        df[['1','2','3','4','5','6','7','8']] = df[['1','2','3','4','5','6','7','8']].apply(0,axis = 1)




EVENT_ID    BSP   S_TRAP  3     7         8      5        2       4      1        6                             
174339802   160.00  3   160.00  47.57   88.01   1.58    268.86  19.14   4.66    17.77
174339802   47.57   7   160.00  47.57   88.01   1.58    268.86  19.14   4.66    17.77
174339802   88.01   8   160.00  47.57   88.01   1.58    268.86  19.14   4.66    17.77
174339802   1.58    5   160.00  47.57   88.01   1.58    268.86  19.14   4.66    17.77
174339802   268.86  2   160.00  47.57   88.01   1.58    268.86  19.14   4.66    17.77
174339802   19.14   4   160.00  47.57   88.01   1.58    268.86  19.14   4.66    17.77
174339802   4.66    1   160.00  47.57   88.01   1.58    268.86  19.14   4.66    17.77
174339802   17.77   6   160.00  47.57   88.01   1.58    268.86  19.14   4.66    17.77

最佳答案

这不是 pivot_table() 输出吗?

df.pivot_table(index="EVENT_ID",columns="SELECTION_TRAP",values="BSP",fill_value=0).add_prefix('n_').reset_index()

SELECTION_TRAP   EVENT_ID    n_1     n_2    n_3  ...    n_5    n_6    n_7    n_8
0               174329130   3.65    7.20    0.0  ...  14.00   0.00   8.20  13.50
1               174331755  34.00    5.18   19.1  ...   0.00  13.00   3.30   2.96
2               174339802   4.66  268.86  160.0  ...   1.58  17.77  47.57  88.01

关于python - 根据给定条件向现有数据框添加多个新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69285931/

相关文章:

python - 将列添加到具有常量值的数据框中

python - Pandas:如何从另一列设置日期时间的小时数?

python - Google 应用引擎 dev_appserver.py 问题

Python脚本无法执行SQL Select语句

python - Pandas 按标签查找内容不起作用

python - 将 Pandas jupyter笔记本中的Excel工作表的一行单元格与多行单元格绑定(bind)

python - 在 reddit.com 中执行 "paster shell example.ini"时出错

javascript - 套接字 : data loss due to socket getting closed due to transport error

python - 将元组列表转换为 Pandas 数据框的单列?

python - 计算每周房间时间表中的重叠时间