优化熊猫应用函数



假设我有一个包含两列的数据框,我希望根据由第一列的值确定的不同阈值过滤第二列的值。这些阈值是在字典中定义的,字典的键是第一列的值,字典的值是阈值。还会有一个默认值来匹配没有任何指定值的列。

例如:

thresholds_dict = {"A": 5, "B": 2, "C": 4, "default": 0}
sample_dataframe = 
| Column1 | Column2 |
|   A     | 3       |
|   A     | 6       |
|   B     | 4       |
|   B     | 1       |
|   C     | 2       |
|   D     | 0       |
result_dataframe =
| Column1 | Column2 |
|   A     | 6       |
|   B     | 4       |
|   D     | 0       |

我一直在做以下事情来实现这个目标:

default = thresholds_dict["default"]
df[df.apply(lambda x: x["Column2"] >= thresholds_dict.get(x["Column1"], default), axis=1)]

然而,与使用单个阈值过滤所有DF的实现相比,执行时间增加了1000倍。有没有更好的方法来实现这一点,避免应用函数?

谢谢!

使用Series.map,如果没有匹配得到缺失值,则将其替换为Series.fillna:

thresholds_dict = {"A": 5, "B": 2, "C": 4, "default": 0}
default = thresholds_dict["default"]
df = df[df["Column2"] >= df["Column1"].map(thresholds_dict).fillna(default)]
print (df)
Column1  Column2
1       A        6
2       B        4
5       D        0

最新更新