在pandas的数据框架中制作一个组[英] Making a group in dataframe in pandas

本文是小编为大家收集整理的关于在pandas的数据框架中制作一个组的处理方法,想解了在pandas的数据框架中制作一个组的问题怎么解决?在pandas的数据框架中制作一个组问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个列表,例如

groups = [['Group1', 'A', 'B'], ['Group2', 'C', 'D']]

和一个数据框架,例如

A 100
B 200
C 300
D 400

我想从上面的列表中赚取一个组总和:

Group 1 300
Group 2 700

我该如何使用python pandas做到这一点? 不用说我是熊猫的新手.谢谢.

推荐答案

另一个选项...但是 @jezrael的方式更好!

import pandas as pd

groups = [['Group1', 'A', 'B'], ['Group2', 'C', 'D']]

df0 = pd.melt(pd.DataFrame(groups).set_index(0).T)
df1 = pd.read_clipboard(header=None)  # Your example data

df = df1.merge(df0, left_on=0, right_on='value')[['0_y', 1]]
df.columns = ['Group', 'Value']

print df.groupby('Group').sum()


        Value
Group        
Group1    300
Group2    700

其他推荐答案

您需要创建dict lists,然后 groupby 和汇总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

可能会进行一些修改的解决方案 - 如果仅列b是由sum聚合的.最后列.

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

其他推荐答案

使用Python 3解开包装和理解来创建字典.在第一列的地图中使用该词典.使用该映射到组.

考虑列表groups和dataframe df

的列表
groups = [['Group1', 'A', 'B'], ['Group2', 'C', 'D']]
df = pd.DataFrame(dict(a=list('ABCD'), b=range(100, 401, 100)))

然后:

df.groupby(df.a.map({k: g for g, *c in groups for k in c})).sum()

          b
a          
Group1  300
Group2  700

本文地址:https://www.itbaoku.cn/post/1727999.html