减少python中数据框的维度

我有数据框,包含三列。我想减少数据框的尺寸。


  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  col3

0     1   876  0.98

1     1   888  0.58

2     1   976  0.48

3     1   648  0.98

4     2   765  0.28

5     2   986  0.28

6     2   765  1.00

7     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                        col4

0     1  [(876, 0.98), (648, 0.98)]

1     2   [(876, 0.45), (765, 1.0)]

我想存储在元组列表中,以便我可以将它用于其他目的。这只是解决更大问题的一部分。


函数式编程
浏览 244回答 1
1回答

白板的微信

FWIWsample = 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                        col40     1  [(876, 0.98), (648, 0.98)]1     2   [(765, 1.0), (876, 0.45)]这些将被命名为元组。你可以避免这种情况name=Nonesample = 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')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python