python - Pandas:合并数据框并创建新的条件列

标签 python pandas merge

我有两个大型 pandas 数据框(有数百万行),其中包含两列、一个组标识符和一个 id。我正在尝试创建一个组合数据框,其中包含组、id,如果 id 在第一个数据帧中,则加上一列为 1 的列,否则为 0,如果 id 在第二个数据帧中,则为一列 1,否则一个 0。

换句话说,我正在尝试合并两个数据帧,并根据每个原始数据帧是否存在 id 创建条件列。关于如何解决这个问题有什么建议吗?

这是一个小例子:

import pandas as pd

>>> df_a = pd.DataFrame({'group': list('AAABBB'), 'id': [11,12,13,21,22,23]})
>>> df_b = pd.DataFrame({'group': list('AAABB'), 'id': [11,13,14,22,24]})
>>> df_a

 group  id
 A     11
 A     12
 A     13
 B     21
 B     22
 B     23

>>> df_b

group  id
A     11
A     13
A     14
B     22
B     24

输出应如下所示:

>>> df_full      
 group  id  a  b
 A      11  1  1
 A      12  1  0
 A      13  1  1
 A      14  0  1
 B      21  1  0
 B      22  1  1
 B      23  1  0
 B      24  0  1

最佳答案

您可以为每个数据框创建两列,合并前用 1 填充,并在合并后用 0 填充 na:

df_a['a'] = 1
df_b['b'] = 1

pd.merge(df_a, df_b, how = 'outer', on = ['group', 'id']).fillna(0)

# group   id      a   b
# 0   A 11.0    1.0 1.0
# 1   A 12.0    1.0 0.0
# 2   A 13.0    1.0 1.0
# 3   B 21.0    1.0 0.0
# 4   B 22.0    1.0 1.0
# 5   B 23.0    1.0 0.0
# 6   A 14.0    0.0 1.0
# 7   B 24.0    0.0 1.0

关于python - Pandas:合并数据框并创建新的条件列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39023511/

相关文章:

python - 如何在 Windows 上从 python 获取长文件系统路径

python - Pandas |如何获取包含时间戳的两列之间的时间差(以秒为单位)

python - Pandas :将多列绘制为相同的 x 值

python - 无法根据python中的用户输入过滤csv表中的数据

Java - 使用字符串合并排序

python - 从 python 中的列表和字典嵌套中删除任意元素

python - 识别 ZMQ 消息的来源?

python - 将数据帧输出到 json 数组

mercurial - 与 Mercurial 的tortoisemerge报告所有行已更改

git - 最佳实践 : Workflow: When to merge in a inhomogeneous team