【问题标题】:Find the latest datetime for each date in a dataframe PANDAS查找数据框 PANDAS 中每个日期的最新日期时间
【发布时间】:2020-11-19 11:06:48
【问题描述】:

我的计算机上有一个文件夹,其中包含大约 8500 个 .csv 文件,这些文件都是各种股票代码的名称。在每个 .csv 文件中,都有一个“timestamp”和“users_holding”列。我将“时间戳”列设置为日期时间索引,因为该列中的条目包括每天的每小时条目,例如/2019-12-01 01:50、2020-01-01 02:55... 2020- 01-01 01:45 等。这些时间戳中的每一个都有一个对应的整数,表示当时持有的用户数。我想创建一个 for 循环,该循环遍历所有 .csv 文件,并计算从 2020 年 2 月 1 日(2020-02-01)到最后一天,每天最后一次持有所有 .csv 文件的用户总数.csv 文件中的日期。该文件夹每天都会更新,所以我无法确定结束日期。

这是我设置的用于将每个股票代码建立为数据框的 for 循环:

path = 'C:\\Users\\N****\\Desktop\\r******\\t**\\p*********\\'
all_files = glob.glob(path + "/*.csv")

for filename in all_files:
    df = pd.read_csv(filename, header = 0, parse_dates = ['timestamp'], index_col='timestamp')

如果有人能告诉我如何编写 for 循环来查找每个日期的最新条目并计算每天的数字,那就太棒了。

谢谢!

【问题讨论】:

    标签: python pandas dataframe datetime for-loop


    【解决方案1】:

    首先,创建一个带有日期时间索引的数据框(以一小时为单位):

    import numpy as np
    import pandas as pd
    
    idx = pd.date_range(start='2020-01-01', end='2020-01-31', freq='H')
    data = np.arange(len(idx) * 3).reshape(len(idx), 3)
    columns = ['ticker-1', 'ticker-2', 'ticker-3']
    df = pd.DataFrame(data=data, index=idx, columns=columns)
    
    print(df.head())
    
                         ticker-1  ticker-2  ticker-3
    2020-01-01 00:00:00         0         1         2
    2020-01-01 01:00:00         3         4         5
    2020-01-01 02:00:00         6         7         8
    2020-01-01 03:00:00         9        10        11
    2020-01-01 04:00:00        12        13        14
    

    然后,按索引分组(保持年-月-日),但删除小时-分钟-秒)。聚合函数为.last()

    result = (df.groupby(by=df.index.strftime('%Y-%m-%d'))
              [['ticker-1', 'ticker-2', 'ticker-3']]
              .last()
             )
    
    print(result.head())
    
                ticker-1  ticker-2  ticker-3
    2020-01-01        69        70        71
    2020-01-02       141       142       143
    2020-01-03       213       214       215
    2020-01-04       285       286       287
    2020-01-05       357       358       359
    

    【讨论】:

    • 我将如何使用包含所有 .csv 文件的文件夹中的所有代码创建一个数据框?
    • 这是一篇很好的 SO 帖子,用于将多个 CSV 文件转换为一个数据框:stackoverflow.com/a/36416258/13608599
    • 那篇文章很有帮助并且可以工作,除了我认为我没有足够的内存,而且我尝试使用 chunksize 并且不起作用(我有 8500 个 csv 文件,每个文件有 19000 行)。我想我必须使用 for 循环遍历每个 csv 文件,并从 2020 年 2 月 1 日到电子表格的最后一天(df.index.max())中的每一天添加 users_holding。你知道我如何设置for循环吗?我对编码很陌生
    • 当前:将所有 csv 文件连接到一个数据帧中。然后找到每个日期的每日最大值。建议:读取一个csv文件;查找每日最大值,将此摘要信息附加到列表中;对每个 csv 文件重复;并在处理完所有 csv 文件后连接摘要。换句话说:边走边减少。如果这有帮助,请考虑投票。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 2021-05-17
    • 2022-01-22
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多