我有两个不同列的csv fies。 表1
title stage jan time
darn 3.001 0.421 5/23/2016 13:14
darn 2.054 0.1213 5/24/2016 14:14
ok 2.829 1.036 5/23/2016 14:14
five 1.115 1.146 5/23/2016 17:14
three 2 5 5/23/2016 21:14
表2
title mar apr may jun date
darn 0.631 1.321 0.951 1.751 5/23/2016 12:14
ok 1.001 0.247 2.456 0.3216 5/24/2016 18:41
three 0.285 1.283 0.924 956 5/25/2016 17:41
我需要按标题(主键)过滤它们,并且表2中的日期字段中的时间等于表1中日期字段中的(时间 - 1小时)的条件。因此输出应该类似于这样:
title stage jan mar apr may jun date
darn 3.001 0.421 0.631 1.321 0.951 1.751 5/23/2016 13:14
我想知道是否可以使用Pandas或SQL查询来完成是最好的前进方式。我抬起头,看到大熊猫可以根据唯一的键值合并。 将pandas导入为pd
a = pd.read_csv("1.csv")
b = pd.read_csv("2.csv")
merged = a.merge(b, on='title')
merged.to_csv("output.csv", index=False)
这是该计划。我正在努力设置如何设置日期字段的条件。欢迎使用SQL和Pandas解决方案
答案 0 :(得分:1)
假设您的时间和日期变量被Pandas认可, 只需添加
merged = merged[merged.date == (merged.time - pd.Timedelta('1 hours'))]
答案 1 :(得分:0)
我会创建一个虚拟列(以匹配"时间"在df
中):
In [11]: df1["time"] = df1["date"] + pd.offsets.Hour(1)
现在你可以干净地合并:
In [12]: df.merge(df1)
Out[12]:
title stage jan time mar apr may jun date
0 darn 3.001 0.421 2016-05-23 13:14:00 0.631 1.321 0.951 1.751 2016-05-23 12:14:00
In [13]: df.merge(df1, on=["title", "time"]) # potentially less reckless to specify columns
Out[13]:
title stage jan time mar apr may jun date
0 darn 3.001 0.421 2016-05-23 13:14:00 0.631 1.321 0.951 1.751 2016-05-23 12:14:00
注意:这意味着您不必进行完全合并(仅限标题),这可能会造成空间效率低下。