Извлечение данных из таблицы истинности pandas - PullRequest
1 голос
/ 20 января 2020

Мне дана таблица истинности, и я хочу создать таблицу списков, используя ее. Я вижу много советов о том, как создать таблицу истинности, но не много о том, как go вернуться. Конечно, я мог бы сделать это с помощью нескольких циклов, но я думаю, что, вероятно, есть хитрый pandas способ сделать это, который был бы гораздо более удовлетворительным. Рассмотрите нижеприведенный кадр данных с подробным описанием транспортных средств, которыми владеет человек:

+-------+------------+-----+----------+
| Name  | motorcycle | car | unicycle |
+-------+------------+-----+----------+
| Sarah |          1 |   0 |        1 |
| Mike  |          0 |   1 |          |
| Doug  |          1 |   1 |        0 |
+-------+------------+-----+----------+

Я бы хотел изменить его следующим образом:

+-------+------------------------+
| Name  |        vehicle         |
+-------+------------------------+
| Sarah | [motorcycle, unicycle] |
| Mike  | [car]                  |
| Doug  | [motorcycle, car]      |
+-------+------------------------+

Существует ли плавный pandas способ выполнить sh это?

Ответы [ 2 ]

2 голосов
/ 20 января 2020

IIU C, мы можем использовать melt, loc и groupby с agg(list) обратите внимание, это будет работать только в pandas 0.24+

s = df.melt(id_vars='Name',var_name='vehicle')
new_df = s.loc[s['value'] == 1].groupby('Name')['vehicle'].agg(list).to_frame()

print(new_df)

                   vehicle
Name                      
 Doug    [motorcycle, car]
 Mike                [car]
 Sarah        [motorcycle]
1 голос
/ 20 января 2020

Похоже, вы пытаетесь повернуть вспять таблицу pd.get_dummies, melt или pivot

Здесь используется подход плавления

df.melt(id_vars='Name', var_name='vehicle').query('value == 1').groupby('Name').agg({'vehicle': list})

                      vehicle
Name                         
Doug        [motorcycle, car]
Mike                    [car]
Sarah  [motorcycle, unicycle]
...