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