python - 无法对列数据重新排序

标签 python pandas dataframe

我有数据框而不是序列。如果我使用 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 )但仍然不起作用。

谢谢

最佳答案

首先通过 str.contains 进行过滤,获取没有模式 V + number 的所有列,然后按 Index.difference 对所有其他值进行排序,相加并传递给 DataFrame.reindex - 首先获取第一个位置的所有非数字非匹配列,然后排序 V + number 列:

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

关于python - 无法对列数据重新排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55570389/

相关文章:

python - 通过 Python 中的 c 函数传递和返回 double 组

python - 如何解压 pkl 文件?

python - psycopg 在错误的 python 中 - Ubuntu

Python pandas 数据框限制

python - Pandas - 填充 NaN 的变体 - 什么是优雅和 pythonic 的方式来做到这一点?

python - 如何格式化数据框看起来像这样?

python - 创建空数据框并向其中添加行

html - 如何将 HTML 表中的数据解析为 Julia 数据结构

python - 如何查找在ECS容器上创建的文件?

python - np.subtract.outer() 返回比我预期更多的维度