我正在尝试执行汇总计算,但是我希望该计算适用于所有其他类别。

所以,

 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的结果。

有没有新颖的方法可以做到这一点?

最佳答案

好吧,我实际上以为我知道了。基本上,我创建了一个新的数据框并对其重新索引。

                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']]


它有效,但是我敢肯定必须有更好的方法。

10-02 08:13