[英]With pandas, how to resample and apply a function to add a column?
我是熊猫的新手,正在做我的第一步。 我一直陷于困境,即使研究也没有结果,很可能我没有使用正确的术语。
我有以下形式的初始数据
datetime counter
2019-06-01 17:57:54 159411631
2019-06-01 17:57:54 159411642
2019-06-01 17:57:54 159411642
2019-06-01 17:58:03 159411642
2019-06-01 17:58:03 159411643
这代表直接从计数器读取的我的耗电量的累计总值。
我现在想根据此数据计算每天的消费量。
我正在尝试按日期重新采样数据:
res = df.resample('D').max() - df.resample('D').min()
这不起作用,因为熊猫不知道如何减去日期列。 我不知道如何只选择一列...而且我不确定明确选择一列是熊猫式的做法。
从上述数据中获取每日消费量的正确方法是什么?
date consumption
2019-06-01 3968
2019-06-02 9491
2019-06-03 20444
使用to_datetime
并添加on
来resample
:
df['datetime'] = pd.to_datetime(df['datetime'])
res = (df.resample('D', on='datetime')['counter'].max() -
df.resample('D', on='datetime')['counter'].min())
或创建DatetimeIndex
:
df['datetime'] = pd.to_datetime(df['datetime'])
df = df.set_index('datetime')
res = (df.resample('D').max() -
df.resample('D').min()).reset_index().rename(columns={'counter':'consumption'})
df['datetime'] = pd.to_datetime(df['datetime'])
df = df.set_index('datetime')
res = df.resample('D').agg(lambda x: x.max() - x.min())
最后将Series
转换为DataFrame
:
res = res.reset_index(name='consumption')
print (res)
datetime consumption
0 2019-06-01 12
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.