从真值表中提取数据

2024-09-30 14:26:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了一个真值表,并希望使用它创建一个列表表。我看到了很多关于如何创建真值表的提示,但没有看到多少关于如何返回的提示。当然,我可以通过一些循环来实现这一点,但我认为可能有一种巧妙的方法来实现这一点,这将更加令人满意。考虑下面的数据框,详细描述一个人拥有的车辆:

+-------+------------+-----+----------+
| 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]      |
+-------+------------------------+

有没有一个巧妙的方法来实现这一点


Tags: 数据方法name列表carmike真值表vehicle
2条回答

IIUC,我们可以使用meltlocgroupbyagg(list)注意,这只在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_假人、熔化或透视表可能会出错

这里是熔化法

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]

相关问题 更多 >