[英]Filter Dataframe based on matched values in a column, and on min/max values timestamp of those values that matched
[英]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.