Python 如果值与最大值的变化在一定范围内(以百分比为单位),请列出列名

Python 如果值与最大值的变化在一定范围内(以百分比为单位),请列出列名,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,所以它们不会添加到列表中。我使用了以下测试数

为不清楚的标题道歉。我的数据是这样的。它们的总和总是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]