简体   繁体   中英

Order DataFrame columns by multiple regex

I want to order a DataFrame by multiple regex. That is to say, for example in this DataFrame

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

get the columns beginning with P before the ones beginning with C.

I've discovered that you can filter with one regex like

df.filter(regex = "P*")

but I can't do that with more levels.

UPDATE: I want to do that in one instruction, I'm already able to use a list of regex and concatenate the columns in another DataFrame.

I believe you need list of DataFrames filtered by regexes in list with concat :

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

you can just re-order columns by regular assignment.

export the colums to a sorted list, and index by it.

try:

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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM