【问题标题】:For each day, subtract last time row from the first time row with Python对于每一天,用 Python 从第一个时间行中减去最后一个时间行
【发布时间】:2018-12-04 14:25:52
【问题描述】:

我有很多天的 5 分钟间隔气象 df。缺少某些行和日期。索引是日期时间格式。

DateTime               Data
2016-01-01 07:00:00     1
2016-01-01 10:30:00     2
2016-01-01 16:55:00     3

2016-03-25 09:25:00     4
2016-03-25 11:30:00     5
2016-03-25 13:35:00     6
2016-03-25 17:40:00     7 

2017-11-09 12:00:00     8
2017-11-09 13:05:00     9
2017-11-09 16:10:00    10
2017-11-09 18:15:00    11
2017-11-09 19:20:00    12
2017-11-09 20:25:00    13

我想用 Data_diff 列创建 daily 数据的 new_df。列 Data_diff 应该包含从每天的最后一个数据减去第一个数据的结果。

预期结果是:

DateTime      Data_diff
2016-01-01    2
2016-03-25    3
2017-11-09    5

我不知道该怎么做。划过使用

new_df = df.diff()

但是,这种情况并非如此。

编辑:我也尝试以下

new_df = df.resample('D')['Data'].agg(['first','last'])
new_df['Data_diff'] = new_df['first'] - new_df['last']

但结果不正确。

【问题讨论】:

    标签: python pandas days period


    【解决方案1】:

    函数resample 添加由NaNs 填充的所有缺失天数。

    DataFrame.dropna 只能删除这些天:

    new_df = df.resample('D')['Data'].agg(['first','last']).dropna(how='all')
    new_df['Data_diff'] =  new_df['last'] - new_df['first']
    print (new_df)
                first  last  Data_diff
    DateTime                          
    2016-01-01    1.0   3.0        2.0
    2016-03-25    4.0   7.0        3.0
    2017-11-09    8.0  13.0        5.0
    

    【讨论】:

      【解决方案2】:

      pandas.groupbydt.day 一起使用,然后应用您要查找的功能。

      s = df.groupby(df['DateTime'].dt.day)['Data'].apply(lambda x: x.values[-1]-x.values[0])
      print(s)
      #           Data
      # DateTime
      # 1            2
      # 9            5
      # 25           3
      

      【讨论】:

        猜你喜欢
        • 2022-09-24
        • 1970-01-01
        • 1970-01-01
        • 2020-04-09
        • 1970-01-01
        • 1970-01-01
        • 2021-12-14
        • 1970-01-01
        • 2015-01-31
        相关资源
        最近更新 更多