如何使用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
相关产品推荐
相关产品推荐

