从真相中提取数据 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,我们可以将 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]
看来您尝试扭转 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]
我得到了一个真相 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,我们可以将 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]
看来您尝试扭转 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]