如何对15分钟频率索引的DataFrame按月重采样并计算非零最小值?
如何在Pandas重采样时排除0值计算月度最小值
你可以通过两种方式实现排除0值的月度最小值计算:
方法一:将0替换为NaN后调用内置min(推荐,效率更高)
Pandas的min()方法会自动忽略NaN值,所以先把Value列中的0替换为缺失值,再做重采样计算即可:
import pandas as pd # 先替换0为缺失值 df['Value'] = df['Value'].replace(0, pd.NA) # 按月度重采样并取最小值 df_min = df.resample('1M')['Value'].min()
方法二:用apply自定义过滤逻辑
如果需要更灵活的过滤规则,可以在重采样时用apply传入自定义函数,先过滤掉大于0的值再取最小:
# 过滤0值后取最小,若组内无有效值则返回NaN df_min = df.resample('1M')['Value'].apply(lambda x: x[x > 0].min() if not x[x > 0].empty else pd.NA)
效果验证
针对你给出的示例数据:
| datetime | Value |
|---|---|
| 2019-09-02 16:15:00 | 0.00 |
| 2019-09-02 16:30:00 | 3.07 |
| 2019-09-02 16:45:00 | 1.05 |
两种方法都会得到2019年9月的最小值为1.05,符合你排除0值的需求。
注意:如果某一月份的所有
Value都是0,两种方法都会返回NaN,避免出现无有效数据时的报错问题。
内容的提问来源于stack exchange,提问作者ALbertittor
相关产品推荐
相关产品推荐

