如何用Pandas来填充当天的最低温度和最高温度?

2024-04-26 19:01:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,它有4列:daytimetmintmax。tmin表示当天的最低温度,tmax表示最高温度。 我想要的是能够用当天的tmin和tmax填充一天的所有NaN值。例如,我要转换此数据帧:

   day time     tmin tmax 
0   01 00:00:00 NaN NaN
1   01 03:00:00 -6.8 NaN
2   01 06:00:00 NaN NaN
3   01 09:00:00 NaN NaN
4   01 12:00:00 NaN NaN
5   01 15:00:00 NaN 1.2
6   01 18:00:00 NaN NaN
7   01 21:00:00 NaN NaN
8   02 00:00:00 NaN NaN
9   02 03:00:00 -7.2 NaN
10  02 06:00:00 NaN NaN
11  02 09:00:00 NaN NaN
12  02 12:00:00 NaN NaN
13  02 15:00:00 NaN 1.8
14  02 18:00:00 NaN NaN
15  02 21:00:00 NaN NaN

对此数据帧:

       day time     tmin tmax
    0   01 00:00:00 -6.8 1.2
    1   01 03:00:00 -6.8 1.2
    2   01 06:00:00 -6.8 1.2
    3   01 09:00:00 -6.8 1.2
    4   01 12:00:00 -6.8 1.2
    5   01 15:00:00 -6.8 1.2
    6   01 18:00:00 -6.8 1.2
    7   01 21:00:00 -6.8 1.2
    8   02 00:00:00 -7.2 1.8
    9   02 03:00:00 -7.2 1.8
    10  02 06:00:00 -7.2 1.8
    11  02 09:00:00 -7.2 1.8
    12  02 12:00:00 -7.2 1.8
    13  02 15:00:00 -7.2 1.8
    14  02 18:00:00 -7.2 1.8
    15  02 21:00:00 -7.2 1.8

Tags: 数据timenan温度daytmaxtmin最低温度
3条回答

如果你不想像@user3483203那样干净利落!你知道吗

import pandas as pd
myfile = pd.read_csv('temperature.txt', sep=' ')
mydata = pd.DataFrame(data = myfile)

for i in mydata['day']:
    row_start = (i-1) * 8 # assuming 8 data points per day
    row_end = (i) * 8
    mydata['tmin'][row_start:row_end] = pd.DataFrame.min(tempdata['tmin'][row_start:row_end], skipna=True)
    mydata['tmax'][row_start:row_end] = pd.DataFrame.max(tempdata['tmax'][row_start:row_end], skipna=True)

只需将fillna与forward fill和back fill参数一起使用:

df.tmin = df.groupby('day')['tmin'].fillna(method='ffill').fillna(method='bfill')
df.tmax = df.groupby('day')['tmax'].fillna(method='ffill').fillna(method='bfill')

使用groupby^{}

df.assign(**df.groupby('day')[['tmin', 'tmax']].transform('first'))

    day      time  tmin  tmax
0     1  00:00:00  -6.8   1.2
1     1  03:00:00  -6.8   1.2
2     1  06:00:00  -6.8   1.2
3     1  09:00:00  -6.8   1.2
4     1  12:00:00  -6.8   1.2
5     1  15:00:00  -6.8   1.2
6     1  18:00:00  -6.8   1.2
7     1  21:00:00  -6.8   1.2
8     2  00:00:00  -7.2   1.8
9     2  03:00:00  -7.2   1.8
10    2  06:00:00  -7.2   1.8
11    2  09:00:00  -7.2   1.8
12    2  12:00:00  -7.2   1.8
13    2  15:00:00  -7.2   1.8
14    2  18:00:00  -7.2   1.8
15    2  21:00:00  -7.2   1.8

或者,如果要修改原始数据帧而不是返回副本:

df[['tmin', 'tmax']] = df.groupby('day')[['tmin', 'tmax']].transform('first')

相关问题 更多 >