我有以下 4 个国家/地区的每日温度:
日 | GB | 美国 | AU | CA |
---|---|---|---|---|
1 | 33 | |||
2 | 32 | |||
3 | 23 | |||
4 | 34 | |||
5 | 23 | 34 | ||
6 | 45 | 34 | ||
7 | 34 | 23 | ||
8 | 34 | 33 | ||
9 | 34 | 45 | 44 | 12 |
10 | 23 | 23 | 23 | 23 |
11 | 34 | 23 | 45 | |
12 | 12 | 23 | 44 | |
13 | 34 | 66 | 53 | |
14 | 34 | 34 | 33 | |
15 | 43 | 34 | 22 | |
16 | 45 | 56 | 34 | |
17 | 34 | 32 | ||
18 | 22 | 12 | ||
19 | 12 | |||
20 | 12 |
我正在尝试创建一个函数,该函数将返回任何给定日期左侧最接近的值加上偏移量。换句话说,如果您要为每一行(其中 offset=0
)从左到右绘制一条假设的水平线,那么返回的值应该是第一个遇到的值。即 offset=1
将只返回第 2 个交叉点,而 offset=2
将返回第 3 个,依此类推。
def nearest(offset=0):
#return df
例如:
nearest(0)
将输出:
日 | 温度 |
---|---|
1 | 33 |
2 | 32 |
3 | 23 |
4 | 34 |
5 | 23 |
6 | 45 |
7 | 34 |
8 | 34 |
9 | 34 |
10 | 23 |
11 | 34 |
12 | 12 |
13 | 34 |
14 | 34 |
15 | 43 |
16 | 45 |
17 | 34 |
18 | 22 |
19 | 34 |
20 | 12 |
和nearest(1)
:
日 | 温度 |
---|---|
1 | |
2 | |
3 | |
4 | |
5 | 34 |
6 | 34 |
7 | 23 |
8 | 33 |
9 | 45 |
10 | 23 |
11 | 23 |
12 | 23 |
13 | 66 |
14 | 34 |
15 | 34 |
16 | 56 |
17 | 32 |
18 | 12 |
19 | |
20 |
实际情况是,我有大约 10 个国家,它们都像上面的第一个表一样交错排列,偏移值可能高达 9!
感谢任何建议。
答案 0 :(得分:2)
我假设空单元格是 NaN
s:
def nearest(df, offset=0):
x = df.loc[:, "GB":].apply(lambda x: sorted(x, key=pd.isna)[offset], axis=1)
return x
print(nearest(df, 1))
打印:
0 NaN
1 NaN
2 NaN
3 NaN
4 34.0
5 34.0
6 23.0
7 33.0
8 45.0
9 23.0
10 23.0
11 23.0
12 66.0
13 34.0
14 34.0
15 56.0
16 32.0
17 12.0
18 NaN
19 NaN
dtype: float64