gpt4 book ai didi

python - 根据列的范围和组合获取结果

转载 作者:太空宇宙 更新时间:2023-11-04 02:03:34 25 4
gpt4 key购买 nike

示例 DF:

ID   Name        Price     Sum       
1 Apple 10 180
2 Apple 10 100
3 Apple 10 80
4 Orange 12 180
5 Orange 12 190
6 Banana 15 50
7 Banana 15 30

预期的 DF:

ID   Name        Price     Sum     Result  
1 Apple 10 180 Full Match
2 Orange 12 180 Match - High Confidence
3 Orange 12 190 Match - High Confidence
4 Banana 15 50 Match - Low Confidence
5 Banana 15 30 Match - Low Confidence

问题陈述:

我需要一个在以下条件下工作的Result 列:

  1. 有一组 NamePrice 即 Name 是 Apple Price 是 10,如果最高值不是 +- 30 range 与其他值然后保持最高值行与结果列作为 Full Match 并删除其他 (Sample Df - ID 1,2 ,3 并且预期的 DF 仅为 ID 1)

  2. 在一组 NamePrice 中,如果它在 +- 30 范围内 并且也大于 100,则结果列将匹配 - 高置信度并且没有行被删除(样本 Df - ID 4,5 和预期的 DF 是 ID 2,3)

  3. NamePrice 组中,如果它在 +- 30 范围内 且小于 60,则结果列将是匹配 - 低置信度并且没有行被删除(样本 Df - ID 6,7 和预期的 DF 是 ID 4,5)

当涉及的组和范围组合在一起时,我无法找到任何有关如何解决此问题的信息。有什么帮助吗?

最佳答案

这是我想出来的,你可以试一试:

#get absolute difference from max value
df['diff_abs']=abs(df.Sum-df.groupby(['Name','Price'])['Sum'].transform('max'))
#check if diff less than 30 remove them
m=df.loc[df.duplicated(['Name','Price'],keep=False)&df.diff_abs.lt(30)].reset_index()
print(m)

index ID Name Price Sum diff_abs
0 0 1 Apple 10 180 0
1 3 4 Orange 12 180 10
2 4 5 Orange 12 190 0
3 5 6 Banana 15 50 0
4 6 7 Banana 15 30 20

c1=~m.duplicated(['Name','Price'],keep=False) #check if entry is just 1 and no dups
c2=m.duplicated(['Name','Price'],keep=False)&m.Sum.lt(60) #if dups check for less than 60
m['result']=np.select([c1,c2],\
['Full Match','Match - Low Confidence'],'Match - High Confidence')
print(m)

index ID Name Price Sum diff_abs result
0 0 1 Apple 10 180 0 Full Match
1 3 4 Orange 12 180 10 Match - High Confidence
2 4 5 Orange 12 190 0 Match - High Confidence
3 5 6 Banana 15 50 0 Match - Low Confidence
4 6 7 Banana 15 30 20 Match - Low Confidence

关于python - 根据列的范围和组合获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55219005/

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