连接在特定条件下的两个CSV文件或数据帧

时间:2017-07-27 15:01:25

标签: python pandas dataframe duplicates concatenation

好吧,我似乎无法找到解决方案,所以这是我的问题。我非常感谢stackoverflow社区的某个人可以提出解决方案,因为我必须提交结果。

我有两个csv文件(可以作为数据帧加载)。一个csv文件包含1458644行和12列,所有行条目都指定了持续6个月的多天秒数。

其他带有天气数据的csv文件有4432个条目,每天的天气数据以小时(此处没有秒数)指定为6个月

我想要做的是组合两个文件的条目,使用一些pythonic操作(或连接条件),以便将第二个数据帧的小时条目中的数据添加到第一个数据帧但是条目为单个小时(在第二个数据帧中指定)重复并在第一个数据帧的单个小时内重复

e.g。

First Dataframe

Date:                     col1, cl2, 
1/2/2013 12:05:00         yyy   etc. 
1/2/2013 12:12:00         yyy
1/2/2013 13:13:00         yyy
1/2/2013 14:14:00         yyy
1/2/2013 14:30:00         yyy
1/2/2013 14:45:00         yyy
1/2/2013 17:00:00         yyy
1/2/2013 17:17:00         yyy
1/2/2013 17:30:00         yyy
1/2/2013 18:17:00         yyy
1/2/2013 18:30:00         yyy

第二个DataFrame

Date                      col3  col4
1/2/2013 12:00:00         xxx   overcast  
1/2/2013 13:00:00         xxx   overcast
1/2/2013 14:00:00         xxx   sunny
1/2/2013 15:00:00         xxx   sunny
1/2/2013 16:00:00         xxx   rain
1/2/2013 17:00:00         xxx   rain
1/2/2013 18:00:00         xxx   cloudy

最终结果应如下所示:

Date:                     col1, col2, col3, col4
1/2/2013 12:05:00         yyy   etc.  xxx   overcast
1/2/2013 12:12:00         yyy         xxx   overcast 
1/2/2013 13:13:00         yyy         xxx   overcast 
1/2/2013 14:14:00         yyy         xxx   sunny
1/2/2013 14:30:00         yyy         xxx   sunny
1/2/2013 14:45:00         yyy         xxx   sunny
1/2/2013 17:00:00         yyy         xxx   rain
1/2/2013 17:17:00         yyy         xxx   rain
1/2/2013 17:30:00         yyy         xxx   rain
1/2/2013 18:17:00         yyy         xxx   cloudy
1/2/2013 18:30:00         yyy         xxx   cloudy

1 个答案:

答案 0 :(得分:2)

如果我们转换为正确的日期时间,这是相当简单的:

df1['Date'] = pd.to_datetime(df1['Date'])
df2['Date'] = pd.to_datetime(df2['Date'])

df1['Hour'] = pd.DatetimeIndex(df1['Date']).floor('h')

combined = df1.merge(df2, left_on='Hour', right_on='Date', how='left',
                     suffixes=('', '_r'))
combined.drop(['Hour', 'Date_r'], axis=1, inplace=True)