筛选数据帧中低于或超过列中指定的最小/最大值的值



我有一个值的数据帧,如果季度值低于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"])

最新更新