У меня есть фрейм данных в R, который выглядит следующим образом:
library(tidyverse)
df_input_r <- data.frame(
id = c(7181, 7183, 7183, 7183, 7185, 7185, 7185, 7191, 7191),
date = c("2020-01-01", "2020-01-01", "2020-01-02", "2020-01-03",
"2020-01-01", "2020-01-02", "2020-01-03",
"2020-01-01", "2020-01-02"),
rank = c(1, 1, 2, 3, 1, 2, 3, 1, 2)
)
Я хотел бы выполнить простую операцию в pandas: я хотел бы сгруппировать по id
и отфильтровать только второй -последняя запись для каждого идентификатора; Я хочу отфильтровать и сохранить все столбцы, а результат будет следующим:
df_output <- data.frame(stringsAsFactors=FALSE,
id = c(7181, 7183, 7185, 7191),
date_mod = c("-", "2020-01-02", "2020-01-02", "2020-01-01"),
rank_mod = c(0, 2, 2, 1)
)
id date_mod rank_mod
1 7181 - 0
2 7183 2020-01-02 2
3 7185 2020-01-02 2
4 7191 2020-01-01 1
Я хотел бы открыть этот фрейм данных R в pandas через reticulate
, выполнить операцию в pandas
и вернуть выходной кадр данных в r.
Код в pandas, который я написал:
grouped = df.groupby('user_id')
index_tokeep = dict(grouped['rank'].nlargest(2).index.tolist())
df.loc[index_tokeep.values(),:]
Спасибо за помощь