首页 > 解决方案 > Pandas:如果无序,则跨列对 DataFrame Cellls 进行排序

问题描述

在 Pandas DataFrame 中修改(排序)一系列数据的最佳方法是什么?比如导入一些数据后,colums应该是升序的,但如果不是,我需要重新排序数据。数据正在从 acsv导入到 apandas.df中。

           num_1    num_2   num_3
date
2020-02-03  17      22       36
2020-02-06  52      22       14
2020-02-10  5        8       29
2020-02-13  10      14       30
2020-02-17  7        8       19

理想情况下,我会在 Dataframe 中找到第二行(熊猫系列)作为要修复的记录:

           num_1    num_2   num_3    num_4     num_5
date
2020-02-06  52      22       14       25         27

并将其修改为:(仅对 nums 1-3 进行排序,而不涉及第 4 列和第 5 列)

           num_1    num_2   num_3    num_4   num_5
date
2020-02-06  14      22       52        25      27

我可以遍历 DataFrame 并通过将每一列与正确的列进行比较来检查序列数据乱序的索引。然后编写一个自定义排序器并将该记录重写回 Dataframe,但这似乎很笨重。

我不得不想象有一种更 Pythonic(熊猫)的方式来做这种事情。我只是在熊猫文档中找不到它。我不想对行重新排序,只需确保值在列中的顺序正确。

更新:我忘了提到最关键的方面之一。DataFrame 中还有其他列不应被触及。所以在下面的例子中,只有sort(num_1, num_2, num_3) 而不是其他的。我猜我可以使用已经提出的解决方案,拆分 DataFrame,对第一部分进行排序并将它们重新合并在一起。有替代方案吗?

标签: pythonpandasdataframe

解决方案


用这个 -

pd.DataFrame(list(df.apply(sorted, axis=1)),columns=df.columns, index=df.index)

推荐阅读