首页 > 解决方案 > 为低于或超过列中指定的最小值/最大值的值过滤数据框

问题描述

我有一个值数据框,如果季度值低于 MinRange 或高于 MaxRange,我想过滤和转置数据框。如果值在最小/最大范围之间,则忽略该值。

Name  MinRange MaxRange 2020Q1 2020Q2 2020Q3 2020Q4
Test1 15       20       13     16     24     17
Test2 18       25       14     15     23     19
Test3 30       39       31     29     24     37

期望的结果:

Quarter Name  MinRange MaxRange Value
2020Q1  Test1 15       20       13
2020Q3  Test1 15       20       24
2020Q1  Test2 18       25       14
2020Q2  Test2 18       25       15
2020Q2  Test3 30       39       29
2020Q3  Test3 30       39       24

关于如何解决这个问题有什么想法吗?

标签: pythonpython-3.xdataframe

解决方案


很可能有更有效的方法来解决这个问题,但下面是一种简单的蛮力方法。请注意,我将原始值存储到 df org_df

test_values = org_df["Name"]
quarter_values = org_df.columns.drop(["Name", "MinRange", "MaxRange"])
new_data = []
for test in test_values:
    min_value = org_df.loc[org_df["Name"]==test]["MinRange"].item()
    max_value = org_df.loc[org_df["Name"]==test]["MaxRange"].item()
    for quarter in quarter_values:
        if (org_df.loc[org_df["Name"]==test][quarter].item() < min_value) or (org_df.loc[org_df["Name"]==test][quarter].item() > max_value):
            new_data.append([
                quarter, 
                test, 
                min_value, 
                max_value, 
                org_df.loc[org_df["Name"]==test][quarter].item()
            ])
        
new_df = pd.DataFrame(new_data, columns=["Quarter", "Name", "MinRange", "MaxRange", "Value"])

推荐阅读