Bạn cần tạo dict
bởi lists
và sau đó groupby
và tổng hợp sum
:
df = pd.DataFrame({'a': ['A', 'B', 'C', 'D'], 'b': [100, 200, 300, 400]})
print (df)
a b
0 A 100
1 B 200
2 C 300
3 D 400
groups = [['Group1', 'A', 'B'], ['Group2', 'C', 'D']]
#http://stackoverflow.com/q/43227103/2901002
d = {k:row[0] for row in groups for k in row[1:]}
print (d)
{'B': 'Group1', 'C': 'Group2', 'D': 'Group2', 'A': 'Group1'}
print (df.set_index('a').groupby(d).sum())
b
Group1 300
Group2 700
phải là có thể một chút thay đổi giải pháp - nếu mà chỉ có cột b
là tập hợp bởi sum
. Cuối cùng reset_index
để chuyển chỉ mục thành cột.
df1 = df.set_index('a').groupby(pd.Series(d, name='a'))['b'].sum().reset_index()
print (df1)
a b
0 Group1 300
1 Group2 700
df2 = df.groupby(df['a'].map(d))['b'].sum().reset_index()
print (df2)
a b
0 Group1 300
1 Group2 700