【问题标题】:Python pandas: filtering rows based on time criteria using pandasPython pandas:使用 pandas 根据时间条件过滤行
【发布时间】:2018-12-17 20:14:34
【问题描述】:

我有一个包含数百万行的 CSV 文件,格式如下:

Amount,Price,Time
0.36,13924.98,2010-01-01 00:00:08
0.01,13900.09,2010-01-01 00:02:04
0.02,13907.59,2010-01-01 00:04:54
0.07,13907.59,2010-01-01 00:05:03
0.03,13925,2010-01-01 00:05:41
0.03,13920,2010-01-01 00:07:02
0.15,13910,2010-01-01 00:09:37
0.03,13909.99,2010-01-01 00:09:58
0.03,13909.99,2010-01-01 00:10:03
0.14,13909.99,2010-01-01 00:10:03

我想先过滤这些数据,然后对过滤后的数据进行一些计算。我使用 pandas data = pd.read_csv() 导入它,以获取 DataFrame。

然后我将Time 列转换为TimeDelta 列(我不确定这对于我想做的事情是必要的),我将时间差写入时间2010-01-01 00:00:00 使用

data['TimeDelta'] = pd.to_timedelta(pd.to_datetime(data.Date)-pd.Timedelta(days=14610))/np.timedelta64(1, 'm')

这是我挣扎的部分。我想要一个返回新 DataFrame 的函数,我只想要每 n 分钟后的第一行,其中 n 是用户定义的整数。

例如。如果n=5,我的数据所需的此函数输出将是:

Amount,Price,Time
0.36,13924.98,2010-01-01 00:00:08
0.07,13907.59,2010-01-01 00:05:03
0.03,13909.99,2010-01-01 00:10:03

n=3 的输出将是:

Amount,Price,Time
0.36,13924.98,2010-01-01 00:00:08
0.02,13907.59,2010-01-01 00:04:54
0.15,13910,2010-01-01 00:09:37

我曾尝试使用floor 和其余的% 来执行此操作,但作为 Python 的初学者,我无法使其正常工作。

【问题讨论】:

    标签: python pandas datetime filtering


    【解决方案1】:

    使用pd.Grouper:

    n=5
    df.groupby(pd.Grouper(key = 'Time', freq=f'{n} min')).first()
    
                          Amount   Price
    Time                                 
    2010-01-01 00:00:00    0.36  13924.98
    2010-01-01 00:05:00    0.07  13907.59
    2010-01-01 00:10:00    0.03  13909.99
    

    【讨论】:

    • 您可以使用所需的用户输入添加到此:frequency = str(n) + ' min',然后将您的代码更改为:df.groupby(pd.Grouper(key = 'Time', freq=frequency)).first()
    • @nixon,有没有办法避免出现这个额外的行?这似乎弄乱了我的列的索引,返回 KeyError: 'Time'
    • 问题是,现在标题中似乎有 2 行,所以如果我说 newdf = df.groupby(pd.Grouper(key = 'Time', freq=f'{n} min')).first() 然后是 print(newdata.Price),我会得到像 Time 2010-01-01 00:00:00 0.36 这样的输出我不能调用新数据.日期
    猜你喜欢
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    相关资源
    最近更新 更多