从熊猫中获取其他类别的汇总

时间:2017-12-07 19:59:36

标签: python pandas

我正在尝试执行聚合计算,但我希望计算应用于其他所有类别。

所以,

 df.groupby(['index']).agg({data : [func1,func2]})

将对按索引分组的数据执行聚合计算func1和func2,但我想对索引中没有的所有数据执行计算。

例如:

index data
A      1
A      2
A      1
B      2
B      2
B      4
B      4
C      1
C      3
D      4
D      1

我希望对B,C,D中的数据执行A的结果。

有没有新方法可以实现这一目标?

1 个答案:

答案 0 :(得分:1)

嗯,我其实认为我想出来了。基本上,我创建了一个新的数据框并重新索引它。

                value
original_index       
A                  44
A                  65
A                  88
B                  69
B                  11
B                  52
C                  56
C                  42
C                  85
D                  66
D                  77
D                   9

循环遍历每个索引,并将不在该索引中的所有内容复制到新数据帧。然后把它们连在一起。

l = []
for i in df.index.unique():
    d = df[~df.index.isin([i])].copy()
    d['new_index'] = i
    d.drop('original_index',axis=0,inplace=True)
    d.set_index('new_index',inplace=True)
    l.append(d)
df2 = pd.concat(l,axis=0)

输出继电器:

           value
new_index       
A             69
A             11
A             52
A             56
A             42
A             85
A             66
A             77
A              9
B             44
B             65
B             88
B             56
B             42
B             85
B             66
B             77
B              9
C             44
C             65
C             88
C             69
C             11
C             52
C             66
C             77
C              9
D             44
D             65
D             88
D             69
D             11
D             52
D             56
D             42
D             85

现在我们可以在新索引上应用groupby函数,它将返回最初不在索引中的值的结果。

group_df = df2.groupby(['new_index']).agg({'value' :[func1,func2]})[['value']]

它有效,但我确信必须有更好的方法。