Python 聚合dataframe以给出元素和分组索引字符串的总和

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

我试图使用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

如果您还有任何问题,请随时发表评论。

聚合的工作方式是提供一个键和一个值,其中键是预先存在的列名,值是映射到列上的函数

因此,要以您想要的方式获得总和,请执行以下操作:

>>> 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
如果您还有任何问题,请随时发表评论