Python 比较多个数据帧使用二进制值添加新的列填充以进行匹配

Python 比较多个数据帧使用二进制值添加新的列填充以进行匹配,python,pandas,dataframe,match,Python,Pandas,Dataframe,Match,假设我有两个数据帧。一个具有所有实例的合并数据帧,另一个仅具有列id的唯一实例 df1看起来像这样: | id | category_name | 459291 | c1 | 349532 | c1 | 459291 | c2 | 719300 | c1 | 349532 | c3 | 459291 | c4 | 649202 | c2 | 459291 | c5 df2看起来像这样: |

假设我有两个数据帧。一个具有所有实例的合并数据帧,另一个仅具有列id的唯一实例

df1看起来像这样:

|    id    |    category_name
|  459291  |    c1
|  349532  |    c1
|  459291  |    c2
|  719300  |    c1
|  349532  |    c3
|  459291  |    c4
|  649202  |    c2
|  459291  |    c5
df2看起来像这样:

|    id    |    category_name
|  459291  |    c1
|  349532  |    c1
|  719300  |    c1
|  649202  |    c2
我要做的是在df2上为列“category\u name”中的每个值创建新列,如果“id”中的唯一值具有匹配的“category\u name”,则输出1或0。然后我会删除“category_name”列。所以,我期望的输出是这样的

|    id    |    c1                |     c2          |     c3        |  c4 |
|  459291  |           1          |        1        |        1      |     1    |
|  349532  |           1          |        1        |        0      |     0    |
|  719300  |           1          |        0        |        0      |     0    |
|  649202  |           0          |        1        |        0      |     0    |

我觉得这也可以使用合并的数据帧来完成,但我不确定如何在保留每个唯一ID的新列值的同时删除重复项。非常感谢您的帮助

这是一种使用
pivot\u table()
的方法,原因是我不必添加
aux
列:

import pandas as pd
df = pd.DataFrame({'id':[459291,349532,459291,719300,349532,459291,649202,459291],
                   'playlist':['new','new','top','new','top','old','top','workout']})
df['aux'] = 1
new_df = pd.pivot_table(df,index='id',columns=['playlist'],aggfunc='count',values='aux').fillna(0).astype(int)
print(new_df)
输出:

playlist  new  old  top  workout
id                              
349532      1    0    1        0
459291      1    1    1        1
649202      0    0    1        0
719300      1    0    0        0

这太完美了。非常感谢您,我不知道您可以在python中使用透视表函数。我肯定会更深入地了解熊猫的所有功能!你几乎什么都有!确保检查这些功能
groupby
sort\u values()
pivot\u table
melt()
crosstab
都非常强大!谢谢你的帮助!我还有一个问题。假设除了ID和播放列表之外,我还有其他列。在执行数据透视表的同时,我如何在数据帧输出中保留它们?这需要一些额外的信息,因为正如您所看到的,我们聚合
ID
列,我们应该知道如何处理这些额外的列(每个ID求和?每个ID计数?)如果您遇到了一些不同的问题,或者只是理论上的问题,请随时提出新问题,我们可以在这里进行讨论。请尝试
pandas。交叉表
谢谢您,我刚才已经解决了这个问题!谢谢你的回答。如果您有sql方面的经验,请查看我最近提出的bigquery问题:)