【问题标题】:Pandas: join two time series data based on multicolumn index [duplicate]Pandas:基于多列索引连接两个时间序列数据[重复]
【发布时间】:2018-08-28 11:45:53
【问题描述】:

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

但它的工作方式不正确。它只是将数据框放在另一个之下。我该怎么办 ?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以简单地执行外部合并,如下所示。

    默认情况下,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
    

    【讨论】:

      猜你喜欢
      • 2020-12-04
      • 2023-03-09
      • 2021-04-21
      • 2012-07-27
      • 1970-01-01
      • 2021-06-20
      • 2018-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多