Python 聚合dataframe以给出元素和分组索引字符串的总和
我试图使用groupby来给我一些元素的总和或平均值,以及每个组的原始行索引字符串。例如,数据帧:Python 聚合dataframe以给出元素和分组索引字符串的总和,python,pandas,Python,Pandas,我试图使用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
>>> 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
如果您还有任何问题,请随时发表评论。聚合的工作方式是提供一个键和一个值,其中键是预先存在的列名,值是映射到列上的函数 因此,要以您想要的方式获得总和,请执行以下操作:
>>> 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
如果您还有任何问题,请随时发表评论。聚合的工作方式是提供一个键和一个值,其中键是预先存在的列名,值是映射到列上的函数 因此,要以您想要的方式获得总和,请执行以下操作:
>>> 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
如果您还有任何问题,请随时发表评论。聚合的工作方式是提供一个键和一个值,其中键是预先存在的列名,值是映射到列上的函数 因此,要以您想要的方式获得总和,请执行以下操作:
>>> 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
如果您还有任何问题,请随时发表评论