Python pandas dataframe:查找值lessthanorequalto curren的最后一次出现

2024-09-29 17:13:28 发布

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

我有2个熊猫数据帧:

df1:

   ksat  muacres  SAND  SILT  CLAY
     0     5326     0     0     0
   0.1     4346     0     0     0
   0.4     4146     0     0     0
   0.8     3476     0     0     0
   1.2     2006     0     0     0

而且, df2:

^{pr2}$

我想在df1中添加一列'st',其中对于df1中的每一行,我在df2中找到ksat值,它大于或等于df1中的ksat值。对于本例,结果将是:

df1:

   ksat  muacres  SAND  SILT  CLAY  st
     0     5326     0     0     0     1
   0.1     4346     0     0     0     1
   0.4     4146     0     0     0     2
   0.8     3476     0     0     0     4
   1.2     2006     0     0     0     5

目前,我在一个循环中循环,但这是非常低效的。熊猫有更好的方法吗?在

谢谢!在


Tags: 数据方法df1stdf2本例claypr2
2条回答

一种方法是合并两次。首先只使用百分位列,以便您可以向后填充:

In [11]: merged = df1[['ksat']].merge(df2[['ksat', 'PERCENTILE']], how='outer', sort=True)

In [12]: merged
Out[12]:
       ksat  PERCENTILE
0  0.000000         NaN
1  0.100000         NaN
2  0.370684           1
3  0.400000         NaN
4  0.558053           2
5  0.794836           3
6  0.800000         NaN
7  0.962329           4
8  1.200000         NaN
9  1.202368           5

In [13]: merged.bfill()
Out[13]:
       ksat  PERCENTILE
0  0.000000           1
1  0.100000           1
2  0.370684           1
3  0.400000           2
4  0.558053           2
5  0.794836           3
6  0.800000           4
7  0.962329           4
8  1.200000           5
9  1.202368           5

然后与此结果合并:

^{pr2}$

你可以试试^{}

df1['st'] = np.searchsorted(df2.ksat, df1.ksat, side='left') + 1

如果PERCENTILE值不是序数,则有一个额外的步骤:

^{pr2}$

相关问题 更多 >

    热门问题