3 回答

TA貢獻1829條經(jīng)驗 獲得超7個贊
DataFrame.sort_values與 一起使用GroupBy.head:
df = df.sort_values(['id','year'], ascending=[True, False]).groupby('id').head(3)
print (df)
year id
0 2019 x1
2 2017 x1
3 2013 x1
4 2018 x2
6 2013 x2
5 2012 x2
如果順序應(yīng)該相同,請?zhí)砑覦ataFrame.sort_index:
df = df.sort_values(['id','year'], ascending=[True, False]).groupby('id').head(3).sort_index()
print (df)
year id
0 2019 x1
2 2017 x1
3 2013 x1
4 2018 x2
5 2012 x2
6 2013 x2

TA貢獻1827條經(jīng)驗 獲得超8個贊
使用GroupBy.nlargest:
df = df.groupby('id')['year'].nlargest(3).reset_index().drop(columns='level_1')
id year
0 x1 2019
1 x1 2017
2 x1 2013
3 x2 2018
4 x2 2013
5 x2 2012
確保它year有一個intdtype:
df['year'] = df['year'].astype(int)

TA貢獻1842條經(jīng)驗 獲得超21個贊
使用 for 循環(huán)來解決這個問題怎么樣(我喜歡循環(huán)):
id_unique = df.id.unique()
df_new = pd.DataFrame(columns = df.columns)
for i in id_unique:
df_new = pd.concat([df_new, df[df['id'] == i ].sort_values(['year'], ascending= [False]).head(3)], axis=0)
添加回答
舉報