繁体   English   中英

使用熊猫,如何重新采样并应用函数以添加列?

[英]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并添加onresample

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM