首页 > 解决方案 > 无法重新排序列数据

问题描述

我有数据框而不是序列。如果我使用len(df.columns),我的数据有 3586 列。如何重新排序数据序列?

ID  V1  V10 V100 V1000 V1001 V1002 ...  V990 V991 V992 V993 V994
A   1   9.0 2.9  0.0   0.0   0.0   0.0  0.0  0.0  0.0  0.0  0.0
B   1   1.2 0.1  3.0   0.0   0.0   0.0  1.0  0.0  0.0  0.0  0.0
C   2   8.6 8.0  2.0   0.0   0.0   0.0  2.0  0.0  0.0  0.0  0.0
D   3   0.0 2.0  0.0   0.0   0.0   0.0  3.0  0.0  0.0  0.0  0.0
E   4   7.8 6.6  3.0   0.0   0.0   0.0  4.0  0.0  0.0  0.0  0.0

我使用了这个df = df.reindex(sorted(df.columns), axis=1)(基于这个问题Re-ordering columns in pandas dataframe based on column name)但仍然无法正常工作。

谢谢你

标签: pythonpandasdataframe

解决方案


首先通过过滤获得所有没有模式V+的列,然后通过 对所有其他值进行排序,加在一起并传递给- 首先获得第一个位置的所有非数字非匹配列,然后排序+列:numberstr.containsIndex.differenceDataFrame.reindexVnumber

L1 = df.columns[~df.columns.str.contains('^V\d+$')].tolist()

L2 = sorted(df.columns.difference(L1), key=lambda x: float(x[1:]))

df = df.reindex(L1 + L2, axis=1)
print (df)
   ID   V1  V10  V100  V990  V991  V992  V993  V994  V1000  V1001  V1002
A   1  9.0  2.9   0.0   0.0   0.0   0.0   0.0   0.0    0.0    0.0    0.0
B   1  1.2  0.1   3.0   1.0   0.0   0.0   0.0   0.0    0.0    0.0    0.0
C   2  8.6  8.0   2.0   2.0   0.0   0.0   0.0   0.0    0.0    0.0    0.0
D   3  0.0  2.0   0.0   3.0   0.0   0.0   0.0   0.0    0.0    0.0    0.0
E   4  7.8  6.6   3.0   4.0   0.0   0.0   0.0   0.0    0.0    0.0    0.0

推荐阅读