當前表
ID date sender sum_sender
A Jan20 3 37
A Feb20 7 37
A Mar20 12 37
A Apr20 15 37
B Mar20 1 26
B May20 10 26
B Jun20 15 26
...
Y Jan21 10 47
Y Feb21 12 47
Y Mar21 20 47
Y Apr21 5 47
我有一個包含許多 ID 的面板時間序列。如何只保留 sum_sender 的 10 個最高值的觀察行?
所以如果我想用 2 個最高 sum_sender 值保留觀察結果
想要的表
ID date sender sum_sender
A Jan20 3 37
A Feb20 7 37
A Mar20 12 37
A Apr20 15 37
Y Jan21 10 47
Y Feb21 12 47
Y Mar21 20 47
Y Apr21 5 47
uj5u.com熱心網友回復:
使用nlargest:
N = 10
out = df.loc[df.groupby('ID')['sum_sender'].nlargest(N).index.levels[1]]
示例N=2:
>>> df.loc[df.groupby('ID')['sum_sender'].nlargest(N).index.levels[1]]
ID date sender sum_sender
0 A Jan20 3 37
1 A Feb20 7 37
4 B Mar20 1 26
5 B May20 10 26
7 Y Jan21 10 47
8 Y Feb21 12 47
更新
如果需要sum_sender獨立的前10名ID,可以簡單使用:
>>> df.nlargest(columns='sum_sender', n=10)
ID date sender sum_sender
7 Y Jan21 10 47
8 Y Feb21 12 47
9 Y Mar21 20 47
10 Y Apr21 5 47
0 A Jan20 3 37
1 A Feb20 7 37
2 A Mar20 12 37
3 A Apr20 15 37
4 B Mar20 1 26
5 B May20 10 26
更新 2 嘗試:
>>> df.loc[df['ID'].isin(df.groupby('ID').max().nlargest(2, 'sum_sender').index)]
ID date sender sum_sender
0 A Jan20 3 37
1 A Feb20 7 37
2 A Mar20 12 37
3 A Apr20 15 37
7 Y Jan21 10 47
8 Y Feb21 12 47
9 Y Mar21 20 47
10 Y Apr21 5 47
uj5u.com熱心網友回復:
drop_duplicates在 "sum_sender" 中,然后找到 2 個最大值nlargest,然后用于isin過濾:
largest_values = df['sum_sender'].drop_duplicates().nlargest(2)
out = df[df['sum_sender'].isin(largest_values)]
輸出:
ID date sender sum_sender
0 A Jan20 3 37
1 A Feb20 7 37
2 A Mar20 12 37
3 A Apr20 15 37
7 Y Jan21 10 47
8 Y Feb21 12 47
9 Y Mar21 20 47
10 Y Apr21 5 47
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/419878.html
標籤:
上一篇:Python資料框串列-列拆分
下一篇:R和Python中的重復值
