我有两个数据帧。第一个df_1
具有以下格式的数据状态:
session_id | user_id | timestamp | state1 | state2
第二个是另一个数据帧df_2
状态,格式为:
session_id | user_id | timestamp | state3 | state4
我希望将它们加入到具有以下结构的最终数据框中:
session_id | user_id | timestamp | state1 | state2 | state3 | state4
我希望保持两个帧中的行不仅仅是重叠。像这样:
session_id user_id timestamp state1 state2 state3 state4
0 1 1 14:00 1 1 0 1
1 1 2 14:00 NAN NAN 0 1
2 1 3 14:00 1 0 NAN NAN
基本上我认为它应该是outer join
。所以我研究了文档并想出了这个:
df_1.set_index(['session_id', 'user_id', 'timestamp']).join(
df_2.set_index(['session_id', 'user_id', 'timestamp']), how="outer")
但它不能正常运作。它只是将数据帧放在另一个之下。我该怎么办 ?
答案 0 :(得分:0)
您可以简单地执行外部合并,如下所示。
默认情况下,pd.merge
适用于列的交集。
<强>设置强>
df1 = pd.DataFrame({'session_id': [1, 1],
'state1': ['1', '1'],
'state2': ['1', '0'],
'timestamp': ['14:00', '14:00'],
'user_id': [1, 3]})
df2 = pd.DataFrame({'session_id': [1],
'state3': ['0'],
'state4': ['1'],
'timestamp': ['14:00'],
'user_id': [2]})
<强>解决方案强>
res = pd.merge(df1, df2, how='outer')
结果
session_id user_id timestamp state1 state2 state3 state4
0 1 1 14:00 1 1 NaN NaN
1 1 3 14:00 1 0 NaN NaN
2 1 2 14:00 NaN NaN 0 1