python - 为低于或超过列中指定的最小值/最大值的值过滤数据框
问题描述
我有一个值数据框,如果季度值低于 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"])
推荐阅读
- mysql - Rails 用一种形式创建 2 个相同的模型
- android - 为什么 Android 中不能有 4 个 Activity 生命周期?
- javascript - localhost 拒绝连接:
- angular - 如何在 Angular 4 中实现 window.open 类型的功能
- javascript - 移动 Safari 中的 AngularJS:
- stripe-payments - 条纹支付:来源与令牌/卡?
- vbscript - VBScript:创建 Outlook 签名 - 如何超链接电话号码?
- mysql - 使用嵌套选择更新 MySql 中的重复值
- go - 无法在 gobuffalo 中验证和创建模型
- javascript - ReactJS 访问嵌套对象