过滤数据帧以查找低于或超过列中指定的最小/最大值的值

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

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


FFIVE
浏览 93回答 1
1回答

catspeake

很可能有更有效的方法来解决这个问题,但下面是一种简单的暴力方法。请注意,我将原始值存储到 df org_dftest_values = org_df["Name"]quarter_values = org_df.columns.drop(["Name", "MinRange", "MaxRange"])new_data = []for test in test_values:&nbsp; &nbsp; min_value = org_df.loc[org_df["Name"]==test]["MinRange"].item()&nbsp; &nbsp; max_value = org_df.loc[org_df["Name"]==test]["MaxRange"].item()&nbsp; &nbsp; for quarter in quarter_values:&nbsp; &nbsp; &nbsp; &nbsp; if (org_df.loc[org_df["Name"]==test][quarter].item() < min_value) or (org_df.loc[org_df["Name"]==test][quarter].item() > max_value):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new_data.append([&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; quarter,&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; test,&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; min_value,&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; max_value,&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; org_df.loc[org_df["Name"]==test][quarter].item()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ])&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;new_df = pd.DataFrame(new_data, columns=["Quarter", "Name", "MinRange", "MaxRange", "Value"])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python