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

Python 如何找到一个pandas元素与另一整列的最接近值?,python,pandas,Python,Pandas,我这里有一张桌子:。这是一个jupyter笔记本,它每天下载西班牙的疫苗接种数据,并将其转化为不同的进化表。具体表格如下: 白天 管理剂量 完全剂量 210104 82834 0 210107 207323 0 210108 277976 0 210111 406091 0 210112 488041 0 210113 581638 0 210114 676186 0 210115 768950 0 210118 897942 4630 210119 966097 18682 210120 10

我这里有一张桌子:。这是一个jupyter笔记本,它每天下载西班牙的疫苗接种数据,并将其转化为不同的进化表。具体表格如下:

白天 管理剂量 完全剂量 210104 82834 0 210107 207323 0 210108 277976 0 210111 406091 0 210112 488041 0 210113 581638 0 210114 676186 0 210115 768950 0 210118 897942 4630 210119 966097 18682 210120 1025937 31284 210121 1103301 98112 210122 1165825 136912 210125 1237593 177396 210126 1291216 247394 210127 1356461 346132 210128 1395618 385518 210129 1474189 503732 210201 1609261 715784 210202 1673054 837038 210203 1764778 997956 210204 1865342 1172244 210205 1988160 1365818 210208 2105033 1572814 210209 2167241 1677564 210210 2233249 1779366 210211 2320507 1886556 210212 2423045 2000970 210215 2561608 2140182 210216 2624512 2193844 210217 2690457 2238360 210218 2782751 2289112 210219 2936011 2342052 210222 3090351 2394122 210223 3165191 2416610 210224 3284678 2442366 210225 3436158 2463564 210226 3605635 2487566 210301 3829465 2523696 210302 3908734 2533400 210303 4059320 2574004 210304 4229092 2617826 210305 4471577 2684970 210308 4712191 2766976 210309 4848648 2824472 210310 4989505 2895676 210311 5172106 3006516 210312 5352767 3166488 210315 5644895 3387348 210316 5742218 3457074 210317 5857085 3609230 210318 5993363 3773626 210322 6321908 4221736 210323 6409196 4313196 210324 6620093 4552466
要查找此类匹配项,您可以使用:

这将只为您设置值,您可以从中开始计算所需内容。

def find_nearest(系列):
当前_idx=series.loc[“index”]
最近的_idx=np.abs(df[“管理剂量”]-series.loc[“完全剂量”])。argmin()
day_diff=(days_in_dt[当前_idx]-days_in_dt[最近的_idx])。天
返回日
#将日期列转换为时间戳
天数=pd.到日期时间(df.Day,格式=“%y%m%d”)
#结果
df[“完整剂量”]。重置索引()。应用(查找最近的,轴=1)
我们
应用
一个函数,将日差计算到最接近的值。传递给函数的值的形式如下:

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

这样,我们也可以得到它们的索引值,并在以后计算差值
reset\u index
prefore
apply
将此索引信息提供给传递的序列。

为什么要使用C7?如果我将其加载到excel中,C7将是
0
。对于你的例子,我想我们会看看C18?也看看这个问题的numpy版本。谢谢!现在,当我对它进行测试时,出现了以下错误:
TypeError:reduction operation'argmin'不允许用于此数据类型
假设在使用argmin时没有数值,会出现此错误消息,但情况并非如此。问题出在哪里?再次感谢您的光临advance@JuanLuisChulilla在应用函数之前,请尝试
df[[“管理剂量”,“完全剂量”]]=df[[“管理剂量”,“完全剂量”]]。astype(int)
以确保它们是整数?再次感谢!!它就像一个符咒。现在,我很难理解的是,
series.loc
如何指向“完整剂量”的每个元素。很明显,df.column指向整个列,但在阅读pandas文档之后,我还没有弄清楚
series.loc在这种情况下是如何工作的。@JuanLuisChulilla我们使用
。在
轴=1
上的数据帧上应用
。(
df[“complete dosis”]
本身是一个系列是,但我们在其上重置了索引,它变成了一个数据帧;您可以单独运行它以查看其行为)
axis=1
表示熊猫将此数据帧的行逐个发送到函数
find_nearest
。正如答案的最后一部分所述,函数每次都会看到一个以这种形式出现的序列,即数据框的列名成为索引名。然后使用
.loc
访问与之对应的值,例如,最后一个示例中的'series.loc[“index”]是8,依此类推。再次感谢!!谢谢你!!苏克兰!!
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
index                8
complete dosis    4630
Name: 8, dtype: int64