从真相中提取数据 table pandas

Extract data from truth table pandas

我得到了一个真相 table,我希望使用它创建一个 table 列表。我看到很多关于如何创造真相的提示 table 但关于如何返回的却很少。当然,我可以用几个循环来做到这一点,但我认为可能有一种巧妙的 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方法来完成这个?

IIUC,我们可以将 meltlocgroupbyagg(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]

看来您尝试扭转 pd.get_dummies、融化或旋转 table 可能会奏效

这里是融化的方法

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]