Pandas:基于多列索引连接两个时间序列数据[重复]

Posted

技术标签:

【中文标题】Pandas:基于多列索引连接两个时间序列数据[重复]【英文标题】:Pandas: join two time series data based on multicolumn index [duplicate] 【发布时间】: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")

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于Pandas:基于多列索引连接两个时间序列数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章

pandas使用iloc函数基于dataframe数据列的索引抽取单列或者多列数据其中多列索引需要嵌入在列表方括号[]中或使用:符号形成起始和终止范围索引

pandas读取csv数据index_col参数指定作为行索引的数据列索引列表形成复合(多层)行索引使用方括号[]基于列索引元组列表索引多列数据(index tuple list)

如何使用 Pandas 重命名重置索引上的多个列

在pandas中聚合多列时如何重置索引

pandas把dataframe的数据列转化为索引列实战:单列转化为索引多列转化为复合索引

使用 np.where 基于多列的 pandas 多个条件