python - 无法重新排序列数据
问题描述
我有数据框而不是序列。如果我使用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)但仍然无法正常工作。
谢谢你
解决方案
首先通过过滤获得所有没有模式V
+的列,然后通过 对所有其他值进行排序,加在一起并传递给- 首先获得第一个位置的所有非数字非匹配列,然后排序+列:number
str.contains
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
推荐阅读
- c# - 从 Angular 发送并在 ASP.NET 服务器中接收时,日期值会发生变化
- ruby-on-rails - 使用 Inquisition gem 时的 Bundler::Source::Git::GitCommandError
- angular - ngx-uploader - 将 JSON 数据对象传递给 uploadInput 数据,返回 [object Object]
- ruby-on-rails - Rails 5:结合两个 ActiveRecord 模型
- reactjs - React-navigation 在父状态更改时重新渲染路由
- c# - 如何修复保存按钮
- javascript - 如何使用节点 js 遍历不规则的嵌套 json
- python - Seaborn Countplot 系列无法识别输入
- vue.js - 如何在 Vue.js 中制作不同的 HTML 和组件文件?
- mysql - 如何根据另一个表的 PK 计算一个表的两列?