熊猫-如果列存在则重新排列列

时间:2020-05-31 12:05:54

标签: python pandas

我有一个混乱的数据帧,如果列退出了,如何重新排列列。

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

2 个答案:

答案 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}}