Python Pandas连接行并汇总值

时间:2017-06-26 08:31:17

标签: python pandas pandas-groupby

我的数据框看起来像这样:

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尝试了不同的东西,但没有成功。 也许有人知道一个简单的伎俩...

干杯, ASTRUS

2 个答案:

答案 0 :(得分:3)

您需要groupby并汇总sumname添加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  

答案 1 :(得分: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  

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

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()