我有一个乱七八糟的数据序列,如果列退出,我如何重新排列它们。
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中,那么应该是One Three Four Five Six。
发布于 2020-05-31 12:11:23
您可以按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发布于 2020-05-31 12:20:26
这取决于列的名称。如果它们是数字,这很容易:只需捕获列,使用内置的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有太多列,或者您不确定要处理哪些列,则可能这很困难),您可以使用一个库来实现这一点,如:https://pypi.org/project/word2number/
https://stackoverflow.com/questions/62115968
复制相似问题