熊猫:基于多列索引

时间:2018-03-19 19:36:03

标签: python pandas

我有两个数据帧。第一个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")

但它不能正常运作。它只是将数据帧放在另一个之下。我该怎么办 ?

1 个答案:

答案 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