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

Python、pandas、匹配组新列中的累积和,python,pandas,dataframe,group-by,sum,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 有没有一个简单有效的解决方案,因为我的数据框非常大。您可以首先需要拆分列a,然后将其转换为原始数据

如果数据帧中有以下列:

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

有没有一个简单有效的解决方案,因为我的数据框非常大。

您可以首先需要拆分列
a
,然后将其转换为原始
数据框

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
然后用于
总和
,不加累加

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
按索引和聚合列按:


第一步已经可以使用了。
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