You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pandas方法链聚合DataFrame?

如何用方法链聚合Pandas DataFrame并引用原数据?

问题说明

想要通过**方法链(method chaining)**从Pandas DataFrame出发完成聚合操作,并且在聚合过程中直接引用原DataFrame,实现类似R语言dplyr中summarise的便捷写法。

示例数据

import pandas as pd

my_df = pd.DataFrame({
    'name': ['john', 'diana', 'rachel', 'chris'],
    'favorite_color': ['red', 'blue', 'green', 'red']
})

my_df
#>      name favorite_color
#> 0    john            red
#> 1   diana           blue
#> 2  rachel          green
#> 3   chris            red

期望输出

#>    total_people  total_ppl_who_like_red
#> 0             4                       2

非方法链的实现方式

可以直接构造新DataFrame得到结果,但这不是想要的方法链形式:

desired_output_via_building_new_df = pd.DataFrame({
    'total_people': [len(my_df)],
    'total_ppl_who_like_red': [my_df.favorite_color.eq('red').sum()]
    })

desired_output_via_building_new_df 
#>    total_people  total_ppl_who_like_red
#> 0             4                       2

目标方法链思路(伪代码)

希望从my_df开始链式调用,类似以下逻辑,但当前写法无法运行:

# pseudo-code; not really working
my_df.agg({
    'total_people': lambda x: len(x),
    'total_ppl_who_like_red': lambda x: x.favorite_color.eq('red').sum()
    })

参考R语言dplyr的实现

在R中可以通过管道直接实现这种聚合,summarise中的函数会自动引用传入的原数据:

library(dplyr, warn.conflicts = FALSE)

my_df <- 
  data.frame(name = c("john", "diana", "rachel", "chris"),
             favorite_color = c("red", "blue", "green", "red")
             )

my_df |> 
  summarise(total_people = n(),                                     # 在summarise语境下,n()和sum()都直接引用my_df
            total_ppl_who_like_red = sum(favorite_color == "red"))  
#>   total_people total_ppl_who_like_red
#> 1            4                      2

内容的提问来源于stack exchange,提问作者Emman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 18:01:26