【问题标题】:In resampling in Pandas: How do I get NaN when all values are NaN, but still use skipna=True?在 Pandas 中重新采样:当所有值都是 NaN 时如何获得 NaN,但仍使用 skipna=True?
【发布时间】:2020-03-27 19:05:10
【问题描述】:

我正在使用:

df_monthly = df_daily.resample('MS').agg(pd.Series.sum, skipna=True)

我想跳过 NaN,但在几个月内所有每日值都是 NaN 我希望 df_monthlyNaN 而不是 0。我该怎么做?

【问题讨论】:

    标签: python pandas nan


    【解决方案1】:

    你需要use the parameter min_count在一个新的函数sum_with_mincount中。请注意 sum_with_mincount 周围的括号 [ ]。没有括号,pandas 不知道如何解释 agg 参数 skipna。不幸的是,这会导致一个 multiIndex,您需要使用最后一行代码对其进行展平。

    小例子:

    idx = pd.date_range(datetime(2020, 1, 1), datetime(2020, 3, 31), freq='D')
    df_daily = pd.DataFrame(np.nan, index=idx, columns=['A', 'B'])
    
    def sum_with_mincount(x): return x.sum(min_count=1)    
    df_monthly = df_daily.resample('MS').agg([sum_with_mincount], skipna=True)
    df_monthly.columns = [col[0] for col in df_monthly.columns]
    

    输出:

                A       B
    2020-01-01  nan     nan
    2020-02-01  nan     nan
    2020-03-01  nan     nan
    

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 1970-01-01
      • 2016-01-26
      • 2021-02-23
      • 2017-09-15
      • 2019-02-25
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      相关资源
      最近更新 更多