对于每一天,用 Python 从第一个时间行中减去最后一个时间行
For each day, subtract last time row from the first time row with Python
我有很多天以 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
我想制作一个 new_df 的 每日 列数据 Data_diff。列 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']
但结果不正确
函数 resample
添加由 NaN
填充的所有缺失天数。
您只能删除这些天 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
将 pandas.groupby
与 dt.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
我有很多天以 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
我想制作一个 new_df 的 每日 列数据 Data_diff。列 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']
但结果不正确
函数 resample
添加由 NaN
填充的所有缺失天数。
您只能删除这些天 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
将 pandas.groupby
与 dt.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