我将如何以dplyr的方式对熊猫中的DF进行分组、总结和过滤



我目前正在研究熊猫,我来自R/dplyr/tidyverse背景。

Pandas有一个不太直观的API,我如何使用Pandas语法从dplyr优雅地重写这样的操作?

library("nycflights13")
library("tidyverse")
delays <- flights %>%
group_by(dest) %>%
summarize(
count = n(),
dist = mean(distance, na.rm = TRUE),
delay = mean(arr_delay, na.rm = TRUE)
) %>%
filter(count > 20, dest != "HNL")

pd.DataFrame.agg方法不允许在方法本身中灵活更改列名

这并不完全正确。实际上,您可以像在R中一样重命名agg中的列,尽管最好不要将count用作列名,因为它也是一个属性:

delays = (
flights
.groupby('dest', as_index=False)
.agg(
count=('year', 'count'),
dist=('distance', 'mean'),
delay=('arr_delay', 'mean'))
.query('count > 20 & dest != "HNL"')
.reset_index(drop=True)
)

我们可以编写函数和方法的panda串联,从而产生相同的数据帧/tibble:

delays = (
flights
.groupby('dest', as_index=False)
.agg({
'year': 'count',
'distance': 'mean',
'arr_delay': 'mean',
})
.rename(columns={
'year': 'count',
'distance': 'dist',
'arr_delay': 'delay',
})
.query('count > 20 & dest != "HNL"')
.reset_index(drop=True)
)

它比较长:Pandas的pd.DataFrame.agg方法不允许在方法本身中灵活地更改列的名称。

但它就像熊猫允许我们去的一样优雅、干净、清晰。

最新更新