【问题标题】:Python Pandas concatenate rows and sum up valuesPython Pandas 连接行并对值求和
【发布时间】:2017-06-26 08:31:17
【问题描述】:

我有一个如下所示的数据框:

name    event_code_0    event_code_1100 event_code_1110 event_code_1120 event_code_1120 event_code_1199
0   A   1   0   0   0   0   0
1   A   0   0   1   0   0   0
2   A   0   0   0   1   0   0
3   A   0   0   1   0   0   0
4   A   0   1   0   0   0   0
5   A   0   0   0   0   1   0
6   A   0   0   0   1   0   0
7   A   0   1   0   0   0   0
8   A   1   0   0   0   0   0
9   B   0   0   0   0   0   1
10  B   0   0   0   0   1   0
11  B   0   0   1   0   0   0
12  B   0   1   0   0   0   0
13  B   1   0   0   0   0   0
14  B   0   0   1   0   0   0
15  B   0   0   0   1   0   0
16  B   0   1   0   0   0   0
17  B   0   0   0   0   0   1

我想合并列 : 'name' 上的不同行并计算事件代码。

例如,数据框应如下所示:

name    event_code_0    event_code_1100 event_code_1110 event_code_1120 event_code_1120 event_code_1199
0   A   2   2   2   2   1   0
1   B   1   2   2   1   1   2

我用 .merge 尝试了不同的东西,但没有成功。 也许有人知道一个简单的技巧......

干杯, 阿斯特鲁斯

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    您需要groupby 和聚合sum,对于name 列添加reset_index 或参数as_index=False

    df1 = df.groupby('name').sum().reset_index()
    print (df1)
      name  event_code_0  event_code_1100  event_code_1110  event_code_1120  \
    0    A             2                2                2                2   
    1    B             1                2                2                1   
    
       event_code_1120  event_code_1199  
    0                1                0  
    1                1                2  
    

    或者:

    df1 = df.groupby('name', as_index=False).sum()
    print (df1)
      name  event_code_0  event_code_1100  event_code_1110  event_code_1120  \
    0    A             2                2                2                2   
    1    B             1                2                2                1   
    
       event_code_1120  event_code_1199  
    0                1                0  
    1                1                2  
    

    【讨论】:

    • 很高兴能帮上忙。美好的一天!
    【解决方案2】:

    您需要按名称列分组并取总和:

    df.groupby('name').sum()
    Out: 
          event_code_0  event_code_1100  event_code_1110  event_code_1120  \
    name                                                                    
    A                2                2                2                2   
    B                1                2                2                1   
    
          event_code_1120.1  event_code_1199  
    name                                      
    A                     1                0  
    B                     1                2  
    

    默认情况下,这会将名称列设置为索引。您可以通过以下方式更改:

    df.groupby('name', as_index=False).sum()
    Out: 
      name  event_code_0  event_code_1100  event_code_1110  event_code_1120  \
    0    A             2                2                2                2   
    1    B             1                2                2                1   
    
       event_code_1120.1  event_code_1199  
    0                  1                0  
    1                  1                2  
    

    df.groupby('name').sum().reset_index()

    【讨论】:

      猜你喜欢
      • 2018-05-23
      • 1970-01-01
      • 2017-10-17
      • 1970-01-01
      • 2018-05-15
      • 2014-01-25
      • 2022-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多