Я изучал книгу «R для науки о данных» Хэдли и пытался
повторить коды в пандах.
Я столкнулся с этой проблемой:
Я должен создать новый столбец ранга на основе задержанного времени
полеты и фильтрация только минимальных и максимальных значений.
R-код:
library(nycflights13)
library(dplyr)
# remove nans
not_cancelled = flights %>%
filter( !is.na(dep_delay), !is.na(arr_delay))
# create new column of rank based on dep_time for each day.
df = not_cancelled %>%
group_by(year,month,day) %>%
mutate(r = min_rank(desc(dep_time))) %>%
filter(r %in% range(r)) %>% # filter only first and last value
select(year,month,day,dep_delay,arr_delay,r)
dim(df)
head(df,10)
Это дает:
m=month d =day dl = dep_delay ad = arr_delay r =r
year m d dl ad r
2013 1 1 2 11 831
2013 1 1 -3 -12 1
2013 1 2 43 36 928
2013 1 2 -5 -24 1
2013 1 3 33 22 900
2013 1 3 -10 -11 1
2013 1 4 26 23 908
2013 1 4 -1 -8 1
2013 1 4 -1 -9 1 # Behold! january 4 has 3 rows!!
2013 1 5 15 18 717
Я пытаюсь повторить это в пандах:
df = pd.read_csv('https://github.com/bhishanpdl/Datasets/blob/master/nycflights13.csv?raw=true')
# print(df.shape)
# print(df.iloc[:5,:5])
not_cancelled = df.dropna(subset=['dep_delay','arr_delay'])
df['r'] = not_cancelled.groupby(['year','month','day'])['dep_time']\
.rank('min',ascending=False)
g = df.groupby(['year','month','day'])['r']
g = g.agg([min,max]).reset_index()
f = g.head()
print(f)
Выход Python:
(336776, 19)
year month day min max
0 2013 1 1 1.0 831.0
1 2013 1 2 1.0 928.0
2 2013 1 3 1.0 900.0
3 2013 1 4 1.0 908.0
4 2013 1 5 1.0 717.0
Это не совсем верно. Как правильно поступить?
Помощь приветствуется. Приветствую Панд!