我正在尝试使用groupby给我一些元素的总和或均值,以及每个组的原始行索引的字符串。因此,例如,数据框:
>>> df = pd.DataFrame([[1,2,3],[1,3,4],[2,3,4],[2,5,6],[7,8,3],[11,12,13],[11,2,3]],index = ['p','q','r','s','t','u','v'],columns =['a','b','c'])
a b c
p 1 2 3
q 1 3 4
r 2 3 4
s 2 5 6
t 7 8 3
u 11 12 13
v 11 2 3
然后,我希望将df按“ a”分组,以给出:
b c indices
1 5 7 p,q
2 8 10 r,s
7 8 3 t
11 14 16 u,v
到目前为止,我已经尝试过:
df.groupby('a').agg({'score' : np.sum, 'indices' : lambda x: ",".join(list(x.index.values))})
但是正在收到基于“索引”不存在的错误,有人可以建议我如何完成我要做的事情吗?
谢谢
聚合的工作方式是给您一个键和一个值,其中键是一个现有的列名,而值是一个映射到该列的函数。
因此,要以所需的方式获得总和,请执行以下操作:
>>> grouped = df.groupby('a')
>>> grouped.agg({'b' : np.sum, 'c' : np.sum}).head()
c b
a
1 7 5
2 10 8
7 3 8
11 16 14
但是您想知道第三列中已合并的行。因此,您实际上需要在此之前添加此列groupby
!这是完整的代码:
df['indices'] = range(len(df))
grouped = df.groupby('a')
final = grouped.agg({'b' : np.sum, 'c' : np.sum, 'indices': lambda x: ",".join(list(x.index.values))})
那么您将得到以下结果:
>>> final.head()
indices c b
a
1 p,q 7 5
2 r,s 10 8
7 t 3 8
11 u,v 16 14
如果您还有其他疑问,请随时发表评论。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句