【问题标题】:Can pandas perform an aggregating operation involving two columns?熊猫可以执行涉及两列的聚合操作吗?
【发布时间】:2021-06-05 00:00:04
【问题描述】:

鉴于以下数据框,
是否可以计算col2col2 + col3 的总和,
在单个聚合函数中?

import pandas as pd
df = pd.DataFrame({'col1': ['a', 'a', 'b', 'b'], 'col2': [1, 2, 3, 4], 'col3': [10, 20, 30, 40]})
. col1 col2 col3
0 a 1 10
1 a 2 20
2 b 3 30
3 b 4 40

在 R 的 dplyr 中,我会使用一行 summarize
我想知道熊猫中的等价物是什么:

df %>% group_by(col1) %>% summarize(col2_sum = sum(col2), col23_sum = sum(col2 + col3))

期望的结果:

. col1 col2_sum col23_sum
0 a 3 33
1 b 7 77

【问题讨论】:

    标签: python r pandas dplyr


    【解决方案1】:

    让我们先试试assign新栏目

    out = df.assign(col23 = df.col2+df.col3).groupby('col1',as_index=False).sum()
    

    输出[81]:

      col1  col2  col3  col23
    0    a     3    30     33
    1    b     7    70     77
    

    据我了解,apply 更像是 R 中的 summarize

    out = df.groupby('col1').\
               apply(lambda x : pd.Series({'col2_sum':x['col2'].sum(),
                                           'col23_sum':(x['col2'] + x['col3']).sum()})).\
                   reset_index()
    Out[83]: 
      col1  col2_sum  col23_sum
    0    a         3         33
    1    b         7         77
    

    【讨论】:

    • 太棒了,apply + pd.Series 部分正是我想要的。谢谢!
    【解决方案2】:

    您可以通过datar 轻松做到这一点:

    >>> from datar.all import f, tibble, group_by, summarize, sum
    >>> df = tibble(
    ...     col1=['a', 'a', 'b', 'b'], 
    ...     col2=[1, 2, 3, 4],
    ...     col3=[10, 20, 30, 40]
    ... )
    >>> df >> group_by(f.col1) >> summarize(
    ...     col2_sum = sum(f.col2), 
    ...     col23_sum = sum(f.col2 + f.col3)
    ... )
          col1  col2_sum  col23_sum
      <object>   <int64>    <int64>
    0        a         3         33
    1        b         7         77
    

    我是datar 包的作者。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-21
      • 1970-01-01
      • 1970-01-01
      • 2022-12-16
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多