python - Pandas - 分组并聚合多列

标签 python pandas pandas-groupby

我正在尝试在多个列上聚合 groupby 中的值。我来自 R/dplyr 世界,我想要的通常可以使用 group_by/summarize 在一行中实现。我正在尝试使用 Pandas 找到一种同样优雅的方法来实现这一目标。

考虑以下输入数据集。我想按状态聚合并将列 v1 计算为 v1 = sum(n1)/sum(d1) by state

使用 dplyr 的 r-code 如下:

input %>% group_by(state) %>% 
  summarise(v1=sum(n1)/sum(d1),
            v2=sum(n2)/sum(d2))

在 Python 中是否有一种优雅的方式来做到这一点?我在堆栈溢出答案 here 中找到了一种获取我想要的内容的稍微冗长的方法。 . 从链接复制修改过的 python 代码

In [14]: s = mn.groupby('state', as_index=False).sum()

In [15]: s['v1'] = s['n1'] / s['d1']

In [16]: s['v2'] = s['n2'] / s['d2']
In [17]: s[['state', 'v1', 'v2']]

输入数据集

state n1    n2     d1  d2
CA   100   1000    1   2
FL   200   2000    2   4
CA   300   3000    3   6
AL   400   4000    4   8
FL   500   5000    5   2
NY   600   6000    6   4
CA   700   7000    7   6

输出

state   v1           v2
AL      100   500.000000
CA      100   500.000000
NY      100  1500.000000
CA      100  1166.666667
FL      100  1166.666667

最佳答案

一种可能的解决方案 DataFrame.assignDataFrame.reindex :

df = (mn.groupby('state', as_index=False)
        .sum()
        .assign(v1 = lambda x: x['n1'] / x['d1'], v2 = lambda x: x['n2'] / x['d2'])
        .reindex(['state', 'v1', 'v2'], axis=1))

print (df)
  state     v1           v2
0    AL  100.0   500.000000
1    CA  100.0   785.714286
2    FL  100.0  1166.666667
3    NY  100.0  1500.000000

另一个是 GroupBy.apply和自定义 lambda 函数:

df = (mn.groupby('state')
        .apply(lambda x: x[['n1','n2']].sum() / x[['d1','d2']].sum().values)
        .reset_index()  
        .rename(columns={'n1':'v1', 'n2':'v2'})
      )
print (df)
  state     v1           v2
0    AL  100.0   500.000000
1    CA  100.0   785.714286
2    FL  100.0  1166.666667
3    NY  100.0  1500.000000

关于python - Pandas - 分组并聚合多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56310665/

相关文章:

python - 在 Python 中包装 C 库,但返回的数组未更改

python - shell 命令因 Python 中的 subprocess.call() 而失败

python - 无法根据python中的用户输入过滤csv表中的数据

python - Pandas 通过拆分现有列添加列

python - 从 hdfs 读取 csv 文件作为数据帧

python - 根据同一df中其他列的多个列值过滤df

python - 将 DataFrame 拆分成 block

python - 将录制的音频从浏览器持久保存为WAV文件到Python API

python - 带 SaaS 的集成开发环境

python - python数据框中的多个条件