gpt4 book ai didi

python - 在保持值(value)关联的同时在 Pandas 中重新采样

转载 作者:太空狗 更新时间:2023-10-30 01:28:24 24 4
gpt4 key购买 nike

从这样的事情开始:

from pandas import DataFrame
time = np.array(('2015-08-01T00:00:00','2015-08-01T12:00:00'),dtype='datetime64[ns]')
heat_index = np.array([101,103])
air_temperature = np.array([96,95])

df = DataFrame({'heat_index':heat_index,'air_temperature':air_temperature},index=time)

df 生成这个:

                     air_temperature    heat_index
2015-08-01 07:00:00 96 101
2015-08-01 19:00:00 95 103

然后每天重新采样:

df_daily = df.resample('24H',how='max')

df_daily 获取这个:

            air_temperature     heat_index
2015-08-01 96 103

因此,通过使用 how='max' 重新采样,pandas 每 24 小时重新采样一次,从每一列中获取该时间段内的最大值。

但正如您在 2015-08-01df 输出中看到的那样,当天的最大热指数(发生在 19:00:00 ) 与同时发生的气温无关。也就是说,103F 的热指数是由 95F 的气温引起的。这种关联会因重新采样而丢失,我们最终会查看一天中不同时段的气温。

有没有办法只对一列重新采样,并将值保留在同一索引的另一列中?因此最终结果将如下所示:

            air_temperature     heat_index
2015-08-01 95 103

我的第一个猜测是对 heat_index 列重新采样...

df_daily = df.resample('24H',how={'heat_index':'max'})

得到...

            air_temperature
2015-08-01 103

...然后尝试从那里执行某种 DataFrame.loc 或 DataFrame.ix,但没有成功。关于如何在重采样后找到相关值的任何想法(例如,找到与后来发现的最大值 heat_index 同时发生的 air_temperature)?

最佳答案

这是一种方法 - .groupby(TimeGrouper()) 本质上就是 resample 正在做的事情,然后聚合函数将每个组过滤到最大观察值。

In [60]: (df.groupby(pd.TimeGrouper('24H'))
.agg(lambda df: df.loc[df['heat_index'].idxmax(), :]))

Out[60]:
air_temperature heat_index
2015-08-01 95 103

关于python - 在保持值(value)关联的同时在 Pandas 中重新采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31976669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com