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)