Как изменить порядок столбцов на основе регулярных выражений? - PullRequest
0 голосов
/ 12 июня 2018

Допустим, у меня есть такой кадр данных:

df = pd.DataFrame({'foo':[1, 2], 'bar': [3, 4], 'xyz': [5, 6]})

   bar  foo  xyz
0    3    1    5
1    4    2    6

Теперь я хочу поместить столбец, содержащий oo, в первую позицию (т. Е. В 0-й индекс);всегда есть только один столбец с этим шаблоном.

В настоящее время я решаю эту проблему, используя filter дважды и concat:

pd.concat([df.filter(like='oo'),  df.filter(regex='^((?!(oo)).)*$')], axis=1)

, который дает желаемый результат:

   foo  bar  xyz
0    1    3    5
1    2    4    6

Мне интересно, есть лиэто более эффективный способ сделать это.

Ответы [ 3 ]

0 голосов
/ 12 июня 2018

А как же:

df[sorted(df, key = lambda x: x not in df.filter(like="oo").columns)]
0 голосов
/ 12 июня 2018

Используя pop:

cols = list(df)
col_oo = [col for col in df.columns if 'oo' in col]
cols.insert(0, cols.pop(cols.index(col_oo[0])))
df = df.ix[:, cols]

Или используя regex:

col_oo = [col for col in cols if re.search('oo', col)]
0 голосов
/ 12 июня 2018

Используйте только списки, объедините списки и выберите subset:

a = [x for x in df.columns if 'oo' in x]
b = [x for x in df.columns if not 'oo' in x]

df = df[a + b]
print (df)
   foo  bar  xyz
0    1    3    5
1    2    4    6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...