Python,pandas,匹配组新列中的累积和

时间:2016-08-29 14:41:02

标签: python pandas dataframe group-by sum

如果我在数据框中有这些列:

a     b  
1     5   
1     7
2     3
1,2   3
2     5

如何创建列c,其中列b使用列a(字符串)的分组求和,保留现有数据帧。某些行可以属于多个组。

a     b     c
1     5     15
1     7     15
2     3     11
1,2   3     26
2     5     11

是否有一个简单有效的解决方案,因为我拥有的数据帧非常大。

1 个答案:

答案 0 :(得分:2)

您可以先将拆分列ajoin拆分为原始DataFrame

print (df.a.str.split(',', expand=True)
               .stack()
               .reset_index(level=1, drop=True)
               .rename('a'))
0    1
1    1
2    2
3    1
3    2
4    2
Name: a, dtype: object

df1 = df.drop('a', axis=1)
        .join(df.a.str.split(',', expand=True)
                      .stack()
                      .reset_index(level=1, drop=True)
                      .rename('a'))
print (df1)
   b  a
0  5  1
1  7  1
2  3  2
3  3  1
3  3  2
4  5  2

然后sum使用df1['c'] = df1.groupby(['a'])['b'].transform(sum) #cast for aggreagation join working with strings df1['a'] = df1.a.astype(str) print (df1) b a c 0 5 1 15 1 7 1 15 2 3 2 11 3 3 1 15 3 3 2 11 4 5 2 11 而不加重。

groupby

transform索引和汇总列的最后print (df1.groupby(level=0) .agg({'a':','.join,'b':'first' ,'c':sum}) [['a','b','c']] ) a b c 0 1 5 15 1 1 7 15 2 2 3 11 3 1,2 3 26 4 2 5 11

// this is callback function
var file = document.createElement('input');
file.setAttribute('type', 'file');

// bind change event.
file.onchange = function () {
    // see step second.
}
file.click();