我有數據框,包含三列。我想減少數據框的尺寸。 data = [[1, 876, 0.98],[1, 888, 0.58],[1, 976, 0.48],[1, 648, 0.98],[2, 765, 0.28], [2, 986, 0.28], [2, 765, 1.0], [2, 876, 0.45]] sample = pd.DataFrame(data, columns=['col1','col2', 'col3']) col1 col2 col30 1 876 0.981 1 888 0.582 1 976 0.483 1 648 0.984 2 765 0.285 2 986 0.286 2 765 1.007 2 876 0.45我希望下面是基于條件的所需輸出: 1. 對于 col1 中的每個值,應該有一行,col 4 應該是元組列表(col2, col3) 2. col4 應該只有基于值的前兩個元組第 3 列 例如,在樣本數據幀中,col2 765 出現了兩次,最終的數據幀應該取在 col3 中具有最高值和第二高的那個data = [[1, [(876, 0.98),(648, 0.98)]],[2, [(876, 0.45), (765, 1.0)]]]desired_output = pd.DataFrame(data, columns=['col1', 'col2']) col1 col40 1 [(876, 0.98), (648, 0.98)]1 2 [(876, 0.45), (765, 1.0)]我想存儲在元組列表中,以便我可以將它用于其他目的。這只是解決更大問題的一部分。
1 回答

白板的微信
TA貢獻1883條經驗 獲得超3個贊
FWIW
sample = sample.sort_values(['col1', 'col3'], ascending=[True, False])
sample.groupby('col1')[['col2', 'col3']].apply(
lambda d: [*d.head(2).itertuples(index=False)]
).reset_index(name='col4')
col1 col4
0 1 [(876, 0.98), (648, 0.98)]
1 2 [(765, 1.0), (876, 0.45)]
這些將被命名為元組。你可以避免這種情況name=None
sample = sample.sort_values(['col1', 'col3'], ascending=[True, False])
sample.groupby('col1')[['col2', 'col3']].apply(
lambda d: [*d.head(2).itertuples(index=False, name=None)]
).reset_index(name='col4')
添加回答
舉報
0/150
提交
取消