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