获取熊猫列左侧最近的值

时间:2021-06-21 12:39:14

标签: python pandas dataframe

我有以下 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!

感谢任何建议。

1 个答案:

答案 0 :(得分:2)

我假设空单元格是 NaNs:

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