我有一个混乱的数据帧,如果列退出了,如何重新排列列。
One Two Three Six Four Five
1 2 3 6 4 5
1 2 3 6 4 5
...
如何按顺序排列此列?这里的问题是,六列可能并非在所有情况下都存在。因此,我需要一条简单的行,如果该列退出,则可以按One Two Three Four Five Six
的顺序进行排列。我的意思是,如果df中没有2,则应该为One Three Four Five Six
答案 0 :(得分:2)
您可以通过DataFrame.reindex
更改顺序,然后仅删除缺失值列:
df1 = (df.reindex(['One', 'Two','Three','Four','Five','Six'], axis=1)
.dropna(how='all', axis=1))
print (df1)
One Three Four Five Six
0 1 3 4 5 6
1 1 3 4 5 6
或者可以在列中创建订单分类,然后对列进行排序:
c = ['One', 'Two','Three','Four','Five','Six']
df.columns = pd.CategoricalIndex(df.columns, categories=c, ordered=True)
df1 = df.sort_index(axis=1)
print (df1)
One Three Four Five Six
0 1 3 4 5 6
1 1 3 4 5 6
答案 1 :(得分:0)
这取决于列的名称。如果它们是数字,则很容易:只需捕获列,使用内置的sorted()
函数将它们排序,然后它们更改数据框的column
属性。这是单线的:
df.columns = sorted(df.columns)
如果列的名称是单词,则要复杂一些。您需要制作一张地图,该地图将按顺序关联数字及其值。例如:
def word_to_number(word):
map = {
"one": 1
"two" : 2
...
}
return map[word.lower()]
df.columns = sorted(df.columns, key=word_to_number)
有关sorted()
:https://docs.python.org/3/howto/sorting.html的更多信息,请参见此处。
您可以使用一个为您执行此操作的库,而不是自己编写地图(如果DF的列过多或不确定要处理的列,可能会很困难)。 {3}}