gpt4 book ai didi

python - 取下一个组值并将其分配给当前组元素

转载 作者:行者123 更新时间:2023-12-03 23:41:38 25 4
gpt4 key购买 nike

我的示例 df 是这样的:

                    hr  temp1
hour
1900-01-01 00:00:00 0 19
1900-01-01 00:15:00 0 19
1900-01-01 00:30:00 0 19
1900-01-01 00:45:00 0 19
1900-01-01 01:00:00 1 18
1900-01-01 01:15:00 1 18
1900-01-01 01:30:00 1 18
1900-01-01 01:45:00 1 18
1900-01-01 02:00:00 2 18
1900-01-01 02:15:00 2 18
1900-01-01 02:30:00 2 18
1900-01-01 02:45:00 2 18
1900-01-01 03:00:00 3 17
预期输出(转换后):
                    hr  temp1 temp
hour
1900-01-01 00:00:00 0 19 19 # as it is (current elem)
1900-01-01 00:15:00 0 19 18 # next group(hr=1) element
1900-01-01 00:30:00 0 19 18 # next group(hr=1) element
1900-01-01 00:45:00 0 19 18 # next group(hr=1) element
1900-01-01 01:00:00 1 18 18 # as it is (current elem)
1900-01-01 01:15:00 1 18 18 # next group(hr=2) element
1900-01-01 01:30:00 1 18 18 # next group(hr=2) element
1900-01-01 01:45:00 1 18 18 # next group(hr=2) element
1900-01-01 02:00:00 2 18 18 # as it is (current elem)
1900-01-01 02:15:00 2 18 17 # next group(hr=3) element
1900-01-01 02:30:00 2 18 17 # next group(hr=3) element
1900-01-01 02:45:00 2 18 17 # next group(hr=3) element
1900-01-01 03:00:00 3 17 17 # as it is (current elem)


所以基本上我想把下一组值放到当前组中。
保持行的第一个值相同。
由于我已经完成了 15 分钟的重采样,因此每个小时组都有重复的值。
我解决不了
编辑:
一种解决方案是在重新采样之前进行移位和赋值。因为当我填充时,我将拥有下一组元素值。我可以将每个组的第一个值更改为 row['temp'] 类似的东西。
这是重采样前的数据:
                    temp1   hr
hour
1900-01-01 00:00:00 19 0
1900-01-01 01:00:00 18 1
1900-01-01 02:00:00 18 2
1900-01-01 03:00:00 17 3
编辑2:
重采样前:
df[['temp1']].shift(-1).fillna(df.iloc[df.shape[0]-1]['temp1']).resample('900s').pad()
然后进行第一组第一元素分配。
但这看起来太复杂了。

最佳答案

编辑
如果您的数据是这样开始的,如您在编辑中所示:

                     temp
1900-01-01 00:00:00 19
1900-01-01 01:00:00 18
1900-01-01 02:00:00 18
1900-01-01 03:00:00 17
您可以重新采样和回填:
>>> df.resample('15T').bfill()

temp
1900-01-01 00:00:00 19
1900-01-01 00:15:00 18
1900-01-01 00:30:00 18
1900-01-01 00:45:00 18
1900-01-01 01:00:00 18
1900-01-01 01:15:00 18
1900-01-01 01:30:00 18
1900-01-01 01:45:00 18
1900-01-01 02:00:00 18
1900-01-01 02:15:00 17
1900-01-01 02:30:00 17
1900-01-01 02:45:00 17
1900-01-01 03:00:00 17

否则,这是我的原始答案。
使用 diff去当 hr变化。发起新 temp列与 temp1值其中 hr更改,然后回填:
starts = df['hr'].diff() != 0
df['temp'] = df['temp1'][starts]
df['temp'] = df['temp'].bfill()
我使用的数据:
import pandas as pd

dr = pd.date_range('01-01-1900 00:00:00', '01-01-1900 03:00:00', freq='15T')
hr = [0,0,0,0,1,1,1,1,2,2,2,2,3]
temp = [19,19,19,19,18,18,18,18,18,18,18,18,17]
df = pd.DataFrame({'hr':hr, 'temp1':temp}, index=dr)
结果:
>>> df

hr temp1 temp
1900-01-01 00:00:00 0 19 19.0
1900-01-01 00:15:00 0 19 18.0
1900-01-01 00:30:00 0 19 18.0
1900-01-01 00:45:00 0 19 18.0
1900-01-01 01:00:00 1 18 18.0
1900-01-01 01:15:00 1 18 18.0
1900-01-01 01:30:00 1 18 18.0
1900-01-01 01:45:00 1 18 18.0
1900-01-01 02:00:00 2 18 18.0
1900-01-01 02:15:00 2 18 17.0
1900-01-01 02:30:00 2 18 17.0
1900-01-01 02:45:00 2 18 17.0
1900-01-01 03:00:00 3 17 17.0

关于python - 取下一个组值并将其分配给当前组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65397413/

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