作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道 pandas.DataFrame.groupby
中存在 rank
方法,但我想知道是否可以使用 min 对于以下问题,rank
方法可以获得与 R
编程语言相同的结果。
复制到我的 github 的数据集有几 MB。
我的尝试:
import numpy as np
import pandas as pd
flights = pd.read_csv('https://github.com/bhishanpdl/Datasets/blob/master/nycflights13.csv?raw=true')
print(flights.shape)
df = (flights[flights.tailnum.notna()]
.assign( on_time = lambda x: x.arr_time.notna() & (x.arr_delay <=0))
.groupby('tailnum')['on_time']
.agg([np.mean,'count',pd.Series.rank(method='min')]) # R uses min_rank
.set_axis(['on_time','n','rank'],axis=1,inplace=False)
.query( 'rank == 1.0')
)
df.head()
它给出了一个错误。
所需输出
shape= 336776, 19
HEAD
tailnum on_time n
N121DE 0 2
N136DL 0 1
N143DA 0 1
N17627 0 2
N240AT 0 5
N26906 0 1
TAIL
tailnum on_time n
N939DN 0 1
N943DN 0 1
N953FR 0 3
N960DN 0 3
N965DN 0 2
N978SW 0 1
R 代码运行良好,但我想使用 Pandas
library(tidyverse)
library(nycflights13)
library(dplyr)
df = flights %>%
filter(!is.na(tailnum)) %>%
mutate(on_time = !is.na(arr_time) & (arr_delay <= 0)) %>%
group_by(tailnum) %>%
summarise(on_time = mean(on_time), n = n()) %>%
filter(min_rank(on_time) == 1)
dim(flights)
head(df)
tail(df)
感谢您的帮助。
相关链接:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.groupby.GroupBy.rank.html
最佳答案
在 R 的 dplyr 中,min_rank
不是聚合函数,而是聚合后的计算(实际上受到 ANSI SQL 2003 窗口函数 RANK () OVER ()
的启发,它也不是聚合函数)。因此,请在聚合后的 Pandas 数据框中添加这样的计算列,而不是在 agg()
内。然后调用 reindex
或 drop
以排除辅助列:
df = (flights[flights.tailnum.notna()]
.assign( on_time = lambda x: x.arr_time.notna() & (x.arr_delay <=0))
.groupby('tailnum')['on_time']
.agg([np.mean, 'count'])
.set_axis(['on_time','n'],axis=1, inplace=False)
.assign(rank = lambda x: pd.Series.rank(x['on_time'], method='min'))
.query("rank == 1")
.reindex(columns=['on_time', 'n']) # OR .drop(columns=['rank'])
)
print(flights.shape)
# (336776, 19)
print(df.head())
# on_time n
# tailnum
# N121DE 0.0 2
# N136DL 0.0 1
# N143DA 0.0 1
# N17627 0.0 2
# N240AT 0.0 5
print(df.tail())
# on_time n
# tailnum
# N943DN 0.0 1
# N953FR 0.0 3
# N960DN 0.0 3
# N965DN 0.0 2
# N978SW 0.0 1
关于python - Pandas:使用 minrank 在 groupby 之后排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55832995/
我知道 pandas.DataFrame.groupby 中存在 rank 方法,但我想知道是否可以使用 min 对于以下问题,rank 方法可以获得与 R 编程语言相同的结果。 复制到我的 gith
我是一名优秀的程序员,十分优秀!