通过多个正则表达式对DataFrame列进行排序

时间:2019-07-05 07:04:03

标签: python regex pandas dataframe

我想通过多个正则表达式订购一个DataFrame。也就是说,例如在此DataFrame中

df = pd.DataFrame({'Col1': [20, 30],
                    'Col2': [50, 60],
                    'Pol2': [50, 60]})

获取以P开头的列,然后以C开头的列。

我发现您可以使用一个正则表达式进行过滤

df.filter(regex = "P*")

但是我不能在更多级别上做到这一点。

更新: 我想在一条指令中做到这一点,我已经能够使用一个正则表达式列表并将它们串联在另一个DataFrame中。

2 个答案:

答案 0 :(得分:3)

我相信您需要使用concat列表中的正则表达式过滤的DataFrames列表:

reg = ['^P','^C']
df1 = pd.concat([df.filter(regex = r) for r in reg], axis=1)
print (df1)
   Pol2  Col1  Col2
0    50    20    50
1    60    30    60

答案 1 :(得分:0)

您可以通过常规分配对列进行重新排序。

将列导出到排序列表中,并以此为索引。

尝试:

import pandas as pd

df = pd.DataFrame({'Col1': [20, 30],
                   'Pol2': [50, 60],
                    'Col2': [50, 60],
                    })

df = df[sorted(df.columns.to_list(), key=lambda col: col.startswith("P"), reverse=True)]

print(df)