簡體   English   中英

為低於或超過列中指定的最小值/最大值的值過濾數據框

[英]Filter dataframe for values that are below or exceed min/max value that is specified in a column

我有一個值的數據框,如果季度值低於 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

關於如何解決這個問題有什么想法嗎?

很可能有更有效的方法來解決這個問題,但下面是一個簡單的蠻力方法。 請注意,我將原始值存儲到 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"])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM