我正在尝试执行汇总计算,但是我希望该计算适用于所有其他类别。
所以,
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']]
它有效,但是我敢肯定必须有更好的方法。