如何找到一个pandas元素与另一整列的最接近值?

2024-09-30 22:20:11 发布

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

我这里有一张桌子:https://deepnote.com/project/vacunacion-en-Espana-vs-covid-19-UhxqL4bdSfGJjeyb1WDM6A/%2Fnotebook.ipynb。这是一个jupyter笔记本,它每天下载西班牙的疫苗接种数据,并将其转化为不同的进化表。具体表格如下:

^{tb1}$

我想知道每个complete doses与整个admin doses相比,最接近的值是多少,以便知道完成疫苗接种期需要多少天。例如,在210129时,有503732次完全剂量,最近的值是210112时的488041次给药剂量-因此488041次给药和503732次给药之间经过了17天

我尝试了很多选择,但无论是生熊猫还是熊猫和裸体,都不起作用。在Excel中是这样的

{=INDEX(A$2:A$56;MATCH(MIN(ABS(B$2:B$56-C7));ABS(B$2:B$56-C7);0))}

但我还没能把它翻译成熊猫

提前谢谢你的帮助


Tags: httpsprojectcomabsenvs剂量桌子
2条回答

要查找此类匹配项,可以使用merge_asof

result = pd.merge_asof(df, df.sort_values('admin doses'), left_on='complete dosis', right_on='admin doses')

这将只为您设置值,从那里您可以开始计算您需要的内容

def find_nearest(series):
    current_idx = series.loc["index"]
    nearest_idx = np.abs(df["admin doses"] - series.loc["complete dosis"]).argmin()
    day_diff = (days_in_dt[current_idx] - days_in_dt[nearest_idx]).days
    return day_diff

# convert Day column to TimeStamps
days_in_dt = pd.to_datetime(df.Day, format="%y%m%d")

# the result
df["complete dosis"].reset_index().apply(find_nearest, axis=1)
0      0
1      3
2      4
3      7
4      8
5      9
6     10
7     11
8     14
9     15
10    16
11    17
12    18
13    18
14    18
15    16
16    17
17    17
18    18
19    15
20    14
21    13
22     9
23     7
24     7
25     7
26     7
27     7
28     6
29     7
30     7
31     7
32     8
33    10
34    11
35    12
36    13
37    14
38    14
39    15
40    16
41    16
42    16
43    18
44    19
45    19
46    20
47    17
48    18
49    19
50    19
51    17
52    18
53    19
54    19
dtype: int64

我们apply使用一个函数,可以找出最接近的日差值。传递给函数的值的形式如下:

index                8
complete dosis    4630
Name: 8, dtype: int64

这样,我们也可以得到它们的索引值,并在以后计算差值reset_index之前的apply将此索引信息提供给传递的序列

相关问题 更多 >