gpt4 book ai didi

Python Pandas 数据框 : Find last occurrence of value less-than-or-equal-to current row

转载 作者:行者123 更新时间:2023-11-28 22:50:50 25 4
gpt4 key购买 nike

我有 2 个 Pandas 数据框:

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:

   PERCENTILE      ksat      b  theta
0 1 0.370684 11.55 46.8
1 2 0.558053 11.55 46.8
2 3 0.794836 10.39 46.8
3 4 0.962329 11.55 46.8
4 5 1.202368 10.39 46.8

我想向 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

目前,我在循环中循环,但效率很低。 pandas 有什么更好的方法吗?

谢谢!

最佳答案

一种方法是合并两次。首先只有百分位列,这样你就可以向后填充:

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

然后合并这个结果:

In [14]: df.merge(merged.bfill())
Out[14]:
ksat muacres SAND SILT CLAY PERCENTILE
0 0.0 5326 0 0 0 1
1 0.1 4346 0 0 0 1
2 0.4 4146 0 0 0 2
3 0.8 3476 0 0 0 4
4 1.2 2006 0 0 0 5

关于Python Pandas 数据框 : Find last occurrence of value less-than-or-equal-to current row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22318306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com