删除单列中具有重复值的行和较旧的时间戳

时间:2017-02-20 07:06:16

标签: python datetime duplicates

假设我有一个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

任何帮助欣赏〜

解决方案:我使用pandas解决了这个问题:

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)

1 个答案:

答案 0 :(得分: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进行排序,但该解决方案会涉及更多(但这可能是一个很好的练习)。