我想通过多个正则表达式订购一个DataFrame。也就是说,例如在此DataFrame中
df = pd.DataFrame({'Col1': [20, 30],
'Col2': [50, 60],
'Pol2': [50, 60]})
获取以P开头的列,然后以C开头的列。
我发现您可以使用一个正则表达式进行过滤
df.filter(regex = "P*")
但是我不能在更多级别上做到这一点。
更新: 我想在一条指令中做到这一点,我已经能够使用一个正则表达式列表并将它们串联在另一个DataFrame中。
答案 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)