Python 如果值与最大值的变化在一定范围内(以百分比为单位),请列出列名
为不清楚的标题道歉。我的数据是这样的。它们的总和总是1Python 如果值与最大值的变化在一定范围内(以百分比为单位),请列出列名,python,pandas,Python,Pandas,为不清楚的标题道歉。我的数据是这样的。它们的总和总是1 >df A B C D E 0.3 0.3 0.05 0.2 0.05 我想做的是识别以下列: 1) 最高值 2) 最高值的减少百分比小于阈值 例如: 假设50%是临界值,我想以[A,B,C]结束,基于以下逻辑: 1) A&B的价值最高 2) A或B的50%为0.15。因为D是0.2,所以它被添加到列表中 3) D的50%为0.1。因为C或E都小于0.1,所以它们不会添加到列表中。我使用了以下测试数
>df
A B C D E
0.3 0.3 0.05 0.2 0.05
我想做的是识别以下列:
1) 最高值
2) 最高值的减少百分比小于阈值
例如:
假设50%是临界值,我想以[A,B,C]结束,基于以下逻辑:
1) A&B的价值最高
2) A或B的50%为0.15。因为D是0.2,所以它被添加到列表中
3) D的50%为0.1。因为C或E都小于0.1,所以它们不会添加到列表中。我使用了以下测试数据帧:
A B C D E
0 0.3 0.3 0.05 0.2 0.05
1 0.5 0.1 0.20 0.1 0.10
从定义以下函数开始,获取当前行的列名:
def getCols(row, threshold):
s = row.sort_values(ascending=False)
currVal = 0.0
lst = []
for key, grp in s.groupby(s, sort=False):
if len(lst) > 0 and key < currVal * threshold:
break
currVal = key
lst.extend(grp.index.sort_values().tolist())
return lst
结果是:
A B C D E cols
0 0.3 0.3 0.05 0.2 0.05 [A, B, D]
1 0.5 0.1 0.20 0.1 0.10 [A]
到目前为止你尝试了什么?欢迎来到stack overflow,这是代码编写服务的方向,你有什么想法吗?你在哪里卡住了?与问题无关,但你的示例数据总和不等于1
A B C D E cols
0 0.3 0.3 0.05 0.2 0.05 [A, B, D]
1 0.5 0.1 0.20 0.1 0.10 [A]