python - 比较多个数据帧添加新列填充二进制值以进行匹配

标签 python pandas dataframe match

假设我有 2 个数据框。一个包含所有实例的合并数据框,另一个仅包含列 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_name”列中的每个值创建新列,如果“id”中的唯一值与“category_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_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 - 比较多个数据帧添加新列填充二进制值以进行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60218012/

相关文章:

python - 一个一个地遍历 ndarray 的所有元素

python - python中使用函数的素数错误

python-3.x - read_csv 对 movielens 20M 数据集给出错误

python - 来自嵌套元组的 Pandas Dataframe

R:计算每列满足条件的次数并且行名出现在列表中

python - 元组列表到二进制表中?

python - 使用 Django channel 进行 session 身份验证

python - 使用变量以点表示法指定对象属性

python - 如何对字符串数组执行 bincount?

python - Pandas 中列名的异常排序