2017-02-20 30 views
-1

假设我有其中第一列预计日期的csv文件,在第二个发行日期,并在第三列是预测值:删除在单柱及以上时间戳重复值的行

forecast,issued,temp 
2016021700,2016021702,5.3 
2016021706,2016021702,6.3 
2016021712,2016021702,8.6 
2016021718,2016021702,5.1 
2016021700,2016021703,5.4 
2016021706,2016021703,6.4 

在Python中,我想自动删除具有相同预测日期和较早发布日期的那些行。根据预测日期,输出应该是日期/时间顺序。预期的结果是:

forecast,issued,temp 
2016021700,2016021703,5.4 
2016021706,2016021703,6.4 
2016021712,2016021702,8.6 
2016021718,2016021702,5.1 

任何帮助感激〜

SOLUTION:我解决了这个用熊猫:

import pandas as pd 

df = pd.read_csv('data.csv') 
df = df.drop_duplicates(subset='forecast',keep='last') 
df = df.sort(['forecast'],ascending=True) 
df.to_csv('out.csv',index=False) 
+0

你应该自己尝试一下,如果需要帮助,请带代码来这里 –

+0

感谢您的评论。不幸的是,我真的不知道从哪里开始,所有的努力都离我的预期太远,不值得在此发布。如果我会靠近,我会分享。对于这一刻,任何建议都会有所帮助。 – jazera

回答

0

最简单的方法是按照发行日期排序文件列,他们使用groupby删除连续的重复项:

from itertools import groupby 

# open a csv_reader for the file 
data = sorted(csv_reader, key=lambda cols: make_date(cols[1])) 
no_dups_data = [] 
for key, group in groupby(data, key=lambda cols: cols[1]): 
    no_dups_data.append(next(group)) 

其中make_date应该以您的格式解析日期。你应该可以使用datetime模块。

您也可以避免使用一些dict s排序,但解决方案会涉及更多(但它可能是一个很好的练习)。

+0

谢谢你的建议。它给了我一些关于排序的想法。我的最终解决方案是使用熊猫(下面的代码) – jazera