Pandas:合并数据帧并创建新的条件列

时间:2016-08-18 16:43:39

标签: python pandas merge

我有两个大型pandas数据帧(包含数百万行),包含两列,一个组标识符和一个id。我正在尝试创建一个包含group,id的组合数据帧,如果id在第一个数据帧中,则加上一个列为1,如果id在第二个数据帧中,则为0和列为1,否则为a 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 :(得分:3)

您可以为每个数据框创建两列,其中一列在合并之前,并在合并后将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