Pandas合并DateTimeIndex的特定属性

时间:2015-02-04 19:52:56

标签: python datetime pandas merge

我目前有两个pandas数据框,它们都使用pandas DateTimeIndex格式编制索引。

df1 
datetimeindex         value
2014-01-01 00:00:00   204.501667
2014-01-01 01:00:00   125.345000
2014-01-01 02:00:00   119.660000

df2 (where the year 1900 is a filler year I added during import. Actual year does not matter)
datetimeindex         temperature
1900-01-01 00:00:00   48.2
1900-01-01 01:00:00   30.2
1900-01-01 02:00:00   42.8

我想使用pd.merge根据左侧索引组合数据框,但是,我想完全忽略这一年来产生这一点:

merged_df 
datetimeindex        value        temperature
2014-01-01 00:00:00  204.501667   48.2
2014-01-01 01:00:00  125.345000   30.2
2014-01-01 02:00:00  119.660000   42.8

到目前为止,我已尝试过:

merged_df = pd.merge(df1,df2,left_on =
['df1.index.month','df1.index.day','df1,index.hour'],right_on = 
['df2.index.month','df2.index.day','df2.index.hour'],how = 'left')

给了我错误KeyError: 'df2.index.month'

有没有办法按照我的描述执行此合并?

由于

2 个答案:

答案 0 :(得分:1)

你必须丢失quotesL

In [11]: pd.merge(df1, df2, left_on=[df1.index.month, df1.index.day, df1.index.hour],
                            right_on=[df2.index.month, df2.index.day, df2.index.hour])
Out[11]:
   key_0  key_1  key_2       value  temperature
0      1      1      0  204.501667         48.2
1      1      1      1  125.345000         30.2
2      1      1      2  119.660000         42.8

此处"df2.index.month"是字符串,而df2.index.month是月份数组。

答案 1 :(得分:0)

可能效率不高,因为pd.to_datetime可能很慢:

df2['NewIndex'] = pd.to_datetime(df2.index)
df2['NewIndex'] = df2['NewIndex'].apply(lambda x: x.replace(year=2014))
df2.set_index('NewIndex',inplace=True)

然后只对整个索引进行合并。