gpt4 book ai didi

python - 使用 Python Pandas 根据第二个 df 中定义的 bins 在一个 df 中对数据进行 bin

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

我正在尝试根据第二个数据框中定义的 bin 将数据放入一个 dataframe 中。我在想 pd.bin 和 pd.merge 的某种组合可能会让我到达那里?

这基本上是每个数据框当前的形式:

df = pd.DataFrame({'id':['a', 'b', 'c', 'd','e'],
'bin':[1, 2, 3, 3, 2],
'perc':[0.1,0.9,0.3,0.7,0.5]})

df2 = pd.DataFrame({'bin':[1, 1, 1, 2, 2, 2, 3, 3, 3],
'result':['low', 'medium','high','low', 'medium','high','low', 'medium','high'],
'cut_min':[0,0.2,0.6,0,0.3,0.7,0,0.4,0.8],
'cut_max':[0.2,0.6,1,0.3,0.7,1,0.4,0.8,1]})

df:

bin id  perc
1 a 0.1
2 b 0.9
3 c 0.3
3 d 0.7
2 e 0.5

这是带有 bins 的表,df2:

bin cut_max cut_min result
1 0.2 0.0 low
1 0.6 0.2 medium
1 1.0 0.6 high
2 0.3 0.0 low
2 0.7 0.3 medium
2 1.0 0.7 high
3 0.4 0.0 low
3 0.8 0.4 medium
3 1.0 0.8 high

我想匹配 bin,并使用包含 df 中的 perc 值的 cut_min 和 cut_max 在 df2 中找到合适的结果。所以,我希望结果表看起来像这样:

bin id  perc    result
1 a 0.1 low
2 b 0.9 high
3 c 0.3 low
3 d 0.7 medium
2 e 0.5 medium

我最初是在 SQL 查询中写的,它通过一个连接非常简单地完成了任务:

select
df.id
, df.bin
, df.perc
, df2.result
from df
inner join df2
on df.bin = df2.bin
and df.perc >= df2.cut_min
and df.perc < df2.cut_max

如果有人知道使用 Pandas 执行此操作的好方法,将不胜感激! (这实际上是我第一次无法仅在 stackoverflow 上搜索找到解决方案,所以如果以上任何内容解释得不够好,我深表歉意!)

最佳答案

第一个merge df and df2 bin 上列,然后是 select the rows其中 cut_min <= perc < cut_max :

In [95]: result = pd.merge(df, df2, on='bin').query('cut_min <= perc < cut_max'); result
Out[95]:
bin id perc cut_max cut_min result
0 1 a 0.1 0.2 0.0 low
5 2 b 0.9 1.0 0.7 high
7 2 e 0.5 0.7 0.3 medium
9 3 c 0.3 0.4 0.0 low
13 3 d 0.7 0.8 0.4 medium

In [97]: result = result[['bin', 'id', 'perc', 'result']]

In [98]: result.sort('id')
Out[98]:
bin id perc result
0 1 a 0.1 low
5 2 b 0.9 high
9 3 c 0.3 low
13 3 d 0.7 medium
7 2 e 0.5 medium

关于python - 使用 Python Pandas 根据第二个 df 中定义的 bins 在一个 df 中对数据进行 bin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25652438/

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