为了账号安全,请及时绑定邮箱和手机立即绑定

熊猫找到最佳匹配并在表中显示结果

熊猫找到最佳匹配并在表中显示结果

偶然的你 2023-10-11 16:08:51
我有一个如下所示的数据表,我试图找到 1991-2019 年与当前年份(2020 年)每列最接近的匹配。最后,我需要一个如下所示的表格来显示查找过程的结果。数据表(日期):      soi     ao   nao   pna       epo       wpoDate                                            1990 -0.7 -0.210  1.18 -0.46 -0.285904  0.7630531991 -1.5 -0.112  0.61  1.15 -0.418762  0.8507521992  0.1 -0.640 -0.28 -1.13  0.679149 -0.7882471993 -0.7 -0.361 -0.41 -0.97 -1.228830 -0.4475791994 -1.6 -0.084 -1.14 -2.02  0.193085 -0.9127371995  0.3 -0.549  0.45  1.22 -0.658217  0.6217211996  0.6 -1.140 -0.69 -0.27  0.394934 -1.1616841997 -1.4  0.195  0.74  0.22  0.138353  0.4148021998  1.0 -1.050 -1.80  0.42  0.254834  0.5632911999 -0.1  0.059  0.50  0.33  0.176403  0.5872102000  0.9  0.395 -0.06 -1.21 -0.303799 -0.8093442001  0.2 -0.707 -0.49  0.04  0.429597  1.0820772002 -0.6 -0.043 -0.54  0.60 -0.117497 -0.0124902003 -0.1  0.467  0.16  0.59  0.172270 -0.5031142004 -0.3  0.855  0.52 -0.11  0.611507 -0.0554182005  0.4  0.802  0.76  1.32  0.117412  0.6285582006 -0.6  0.606 -1.43  0.31 -0.439056 -0.6662512007  0.2  0.179  0.85  1.52 -0.091188  0.8873572008  1.2 -0.327  1.14  0.89 -0.146648 -0.4445642009  0.3  0.875  1.62  1.03  0.747285  0.2234642010  2.2 -0.865 -0.62  1.07 -0.322557  0.0027582011  1.0  0.665  0.67 -0.39  1.035278  1.1462692012  0.2  0.772 -0.43 -0.39 -0.006886  0.5600832013  0.3 -0.461  0.38  0.41  0.451967  0.6009242014 -0.7  0.102  1.72  0.78 -0.343152 -0.4538562015 -1.6 -0.165 -0.49 -0.80  0.394162 -1.1611642016  1.2  0.781  0.74  0.11  0.104103  0.1892802017  0.6 -0.492 -0.45 -0.32  0.084595 -0.2687212018 -0.9  0.585  1.78  1.16 -1.217344 -1.9470522019 -1.2  0.306 -0.01  1.62 -0.006176  0.6761292020  0.9  0.631  1.11  0.59 -0.398920 -0.165507例如,最终结果需要如下所示:  index     0  0   soi  2010  1    ao  2009  2   nao  2018  3   pna  2019  4   epo  2011  5   wpo  2011  我尝试过以这种形式使用 argsort,但我无法弄清楚如何在每列的循环中提取最佳匹配,并以表格形式创建结果。daty.iloc[(daty['soi']-input).abs().argsort()[:1]]。感谢您的任何帮助!
查看完整描述

2 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

你的意思是:


df.iloc[:-1].sub(df.iloc[-1]).abs().idxmin()

输出:


soi    2000

ao     2006

nao    2008

pna    2003

epo    1991

wpo    2017

dtype: int64


查看完整回答
反对 回复 2023-10-11
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

你可以这样做:


df.idxmax(axis='index')

对于您的数据集,其计算结果为:


soi    2010

ao     2009

nao    2018

pna    2019

epo    2011

wpo    2011

dtype: int64

为了测试这一点,我从您的帖子中创建了数据框,如下所示:


from io import StringIO

infile= StringIO(

"""Date  soi     ao   nao   pna       epo       wpo

1990 -0.7 -0.210  1.18 -0.46 -0.285904  0.763053

1991 -1.5 -0.112  0.61  1.15 -0.418762  0.850752

1992  0.1 -0.640 -0.28 -1.13  0.679149 -0.788247

1993 -0.7 -0.361 -0.41 -0.97 -1.228830 -0.447579

1994 -1.6 -0.084 -1.14 -2.02  0.193085 -0.912737

1995  0.3 -0.549  0.45  1.22 -0.658217  0.621721

1996  0.6 -1.140 -0.69 -0.27  0.394934 -1.161684

1997 -1.4  0.195  0.74  0.22  0.138353  0.414802

1998  1.0 -1.050 -1.80  0.42  0.254834  0.563291

1999 -0.1  0.059  0.50  0.33  0.176403  0.587210

2000  0.9  0.395 -0.06 -1.21 -0.303799 -0.809344

2001  0.2 -0.707 -0.49  0.04  0.429597  1.082077

2002 -0.6 -0.043 -0.54  0.60 -0.117497 -0.012490

2003 -0.1  0.467  0.16  0.59  0.172270 -0.503114

2004 -0.3  0.855  0.52 -0.11  0.611507 -0.055418

2005  0.4  0.802  0.76  1.32  0.117412  0.628558

2006 -0.6  0.606 -1.43  0.31 -0.439056 -0.666251

2007  0.2  0.179  0.85  1.52 -0.091188  0.887357

2008  1.2 -0.327  1.14  0.89 -0.146648 -0.444564

2009  0.3  0.875  1.62  1.03  0.747285  0.223464

2010  2.2 -0.865 -0.62  1.07 -0.322557  0.002758

2011  1.0  0.665  0.67 -0.39  1.035278  1.146269

2012  0.2  0.772 -0.43 -0.39 -0.006886  0.560083

2013  0.3 -0.461  0.38  0.41  0.451967  0.600924

2014 -0.7  0.102  1.72  0.78 -0.343152 -0.453856

2015 -1.6 -0.165 -0.49 -0.80  0.394162 -1.161164

2016  1.2  0.781  0.74  0.11  0.104103  0.189280

2017  0.6 -0.492 -0.45 -0.32  0.084595 -0.268721

2018 -0.9  0.585  1.78  1.16 -1.217344 -1.947052

2019 -1.2  0.306 -0.01  1.62 -0.006176  0.676129

2020  0.9  0.631  1.11  0.59 -0.398920 -0.165507"""

)


df= pd.read_fwf(infile).set_index('Date')


查看完整回答
反对 回复 2023-10-11
  • 2 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信