Python: объединить до 3 столбцов Dataframe в 1, но ни один из 3 не может существовать - PullRequest
2 голосов
/ 11 февраля 2020

У меня есть датафрейм, сформированный следующим образом:

+------+------+------+--------+--------+--------+--------+
| Col1 | Col2 | Col3 | Col1.1 | Col2.1 | Col3.1 | Col1.2 |
+------+------+------+--------+--------+--------+--------+
|    0 |    0 |    1 |      1 |      0 |      0 |      0 |
|    1 |    1 |    0 |      0 |      0 |      1 |      0 |
|    0 |    0 |    1 |      0 |      1 |      0 |      1 |
+------+------+------+--------+--------+--------+--------+

Теперь я хочу объединить столбцы в один, как все столбцы Col1. *, В столбец Col1, где есть 1:

+------+------+------+--------+--------+
| Col1 | Col2 | Col3 | Col2.1 | Col3.1 |
+------+------+------+--------+--------+
|    1 |    0 |    1 |      0 |      0 |
|    1 |    1 |    0 |      0 |      1 |
|    1 |    0 |    1 |      1 |      0 |
+------+------+------+--------+--------+

df['Col1'] = df[['Col1', 'Col1.1', 'Col1.2']].max(axis=1)

Это работает, если существуют все 3 столбца. Но, очевидно, нет, если я хочу объединить Col2 с Col2.1 и Col2.2, потому что они не существуют.

Есть ли способ с pandas или в python, чтобы выполнить эту задачу с некоторой функцией или мне нужно go длинный путь с большим количеством дел?

1 Ответ

5 голосов
/ 11 февраля 2020

Давайте использовать строковые манипуляции и groupby с axis=1 и max:

df.groupby(df.columns.str[:4],  axis=1).max()

Вывод:

|    |   Col1 |   Col2 |   Col3 |
|---:|-------:|-------:|-------:|
|  0 |      1 |      0 |      1 |
|  1 |      1 |      1 |      1 |
|  2 |      1 |      1 |      1 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...