【问题标题】:Concatenate Two CSV files or dataframes under a certain condition在特定条件下连接两个 CSV 文件或数据帧
【发布时间】:2017-07-27 15:01:25
【问题描述】:

好的,我似乎找不到解决方案,所以这是我的问题。如果来自 stackoverflow 社区的人能尽快提出解决方案,我将不胜感激,因为我必须提交结果。

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

另一个带有天气数据的csv文件有4432个条目,每天的天气数据用6个月的小时(这里没有秒持续时间)指定

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

例如

第一个数据帧

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

第二个数据帧

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

【问题讨论】:

  • 因此,对于 frame1 中的每个记录/行,您在 frame2 中查找相同的小时,以及它的列?并且在 1 和 2 之间有可变数量的匹配。

标签: python pandas dataframe duplicates concatenation


【解决方案1】:

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

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)

【讨论】:

  • 该死,谢谢老兄,它就像一个魅力。此外,组合文件中似乎有一些行完全缺少 RIGHT (df2) 数据框。我检查了第二个数据框,有些列缺少值,但第二个数据框的行条目并不完全是空的。任何想法,可能是什么原因造成的!
  • @Jon_Snow_ 很高兴为您提供帮助。我不确定你的意思 - 你是说某些日期时间没有正确转换吗?
  • 不,我的意思是组合文件中的第二个数据帧的条目在某些行中完全与第一个数据帧的条目相比缺失。就像 df1 在该行中有值一样,但 df2 值根本不存在我猜日期时间已正确转换,但是在某些情况下转换似乎从第二个 df 失败。一个条目,例如在组合文件的日期时间 12:00 时丢失。我检查了 df2,那个小时的值是存在的。
  • @Jon_Snow_ 嗯我不确定那里发生了什么。你的日期是月-日-年还是日-月-年?这可能会导致问题?
  • 有趣的观察者,我将再次更彻底地查看文件,但两列中的日期格式似乎相同。非常感谢 !!顺便说一句,它们是月-日-年
猜你喜欢
  • 1970-01-01
  • 2019-10-05
  • 2018-03-27
  • 1970-01-01
  • 2021-12-03
  • 2020-05-23
  • 1970-01-01
  • 2019-03-14
  • 1970-01-01
相关资源
最近更新 更多