Панды - объединить все столбцы с одной и той же подстрокой - PullRequest
0 голосов
/ 07 мая 2018

У меня есть много столбцов, которые содержат одну и ту же подстроку, и я хочу объединить их с одним с помощью функции OR.

Итак, я хочу объединить все столбцы с одинаковым

dfin.columns.str.split("_").str[1]

first_RG7509|   first_YY6124|   last_YY6124|    first_WE4818|first_AA7542|  last_RG7509

1|0|1|1|0|0

и вывод должен быть:

RG7509|YY6124|WE4818|AA7542

1|1|1|0

Как мне этого добиться?

Ответы [ 3 ]

0 голосов
/ 07 мая 2018

Вы можете сделать групповой с осью = 1:

In [11]: df
Out[11]:
   first_RG7509  first_YY6124  last_YY6124  first_WE4818  first_AA7542  last_RG7509
0             1             0            1             1             0            0

In [12]: df.groupby(lambda x: x.split("_")[1], axis=1).sum()
Out[12]:
   AA7542  RG7509  WE4818  YY6124
0       0       1       1       1
0 голосов
/ 07 мая 2018

Вы можете также выполнить повторную проверку:

df.columns = df.columns.str.split('_').str[1]
df = (df.T.sort_values(by=0)
          .reset_index()
          .drop_duplicates(subset='index', keep='last')
          .set_index('index').T)

Полное доказательство:

import pandas as pd

data = '''\
first_RG7509|first_YY6124|last_YY6124|first_WE4818|first_AA7542|last_RG7509
1|0|1|1|0|0'''

df = pd.read_csv(pd.compat.StringIO(data), sep='|')

df.columns = df.columns.str.split('_').str[1]
df = (df.T.sort_values(by=0)
          .reset_index()
          .drop_duplicates(subset='index', keep='last')
          .set_index('index').T)
0 голосов
/ 07 мая 2018

Вы можете взять транспонирование, сгруппировать по второй части каждой строки, а затем транспонировать обратно:

>>> df.T.groupby(df.T.index.str.split('_').str[1]).sum() > 0).T.astype(int)
    AA7542  RG7509  WE4818  YY6124
0   0   1   1   1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...