【发布时间】:2020-03-27 19:05:10
【问题描述】:
我正在使用:
df_monthly = df_daily.resample('MS').agg(pd.Series.sum, skipna=True)
我想跳过 NaN,但在几个月内所有每日值都是 NaN 我希望 df_monthly 是 NaN 而不是 0。我该怎么做?
【问题讨论】:
我正在使用:
df_monthly = df_daily.resample('MS').agg(pd.Series.sum, skipna=True)
我想跳过 NaN,但在几个月内所有每日值都是 NaN 我希望 df_monthly 是 NaN 而不是 0。我该怎么做?
【问题讨论】:
你需要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
【讨论】: