如何将数据框的列的值与其他数据框中的正确行匹配?

时间:2019-10-20 20:50:21

标签: pandas concat

我有一些带有日期(每天)和温度数据的csv文件。但是,文件的日期不同(有时有重叠,缺少日期,...)。我要执行的操作是使用第一列作为日期(包括所有日期)创建源文件,并添加与日期相对应的不同csv文件中的温度数据列。

为了简化起见,我考虑只有一个文件(df1)。 因此,我将datetime(df2)定义为我的源文件,并尝试使用pd.concate()将df1添加到其中。这可行,但是当我想保留所有行时,它会从df1中删除不可用的日期。

import pandas as pd
data = {'Datestart':['1/1/2010', '1/2/2010', '1/5/2010', '1/10/2010'],   'Temp':[20, 21, 19, 18]} 
df1 = pd.DataFrame(data)
df2 = pd.DataFrame()
df2['Date'] = pd.date_range(start='1/1/2010', end='1/20/2010', freq='D')
df3 = pd.concat([df2.set_index('Date'),     df1.set_index('Datestart').Temp],axis=1,join='inner')

创建它:

            Temp
2010-01-01    20
2010-01-02    21
2010-01-05    19
2010-01-10    18

当我需要这个时:

1/1/2010   20
1/2/2010   21
1/3/2010   NaN
1/4/2010   NaN
1/5/2010   19
1/6/2010   NaN
1/7/2010   NaN
1/8/2010   NaN
1/9/2010   NaN
1/15/2010   18
1/16/2010  NaN
1/17/2010  NaN
1/20/2010  NaN
1/21/2010  NaN

2 个答案:

答案 0 :(得分:2)

尝试先将$("input").easyAutocomplete(options).click(function(){ $(this).triggerHandler(jQuery.Event("keyup", { keyCode: 65, which: 65})) }); 转换为日期时间,然后再合并。

Datestart

然后,您可以删除df1['Datestart'] = pd.to_datetime(df1['Datestart']) df3 = df1.merge(df2, how = "outer", left_on = 'Datestart', right_on = 'Date') 列并重新格式化日期列。

Datestart

答案 1 :(得分:1)

在您的pd.concat通话中,尝试使用join=outer而不是join=inner。这应该从两个数据集中返回条目。