Python:每月在数据框中为所有列添加 1

Python: Add 1 every month in dataframe for all columns

我有一个数据框:

            A    B   C
date
2021-01-01  1    nan 1
2021-01-23  nan  1   1
2021-02-03  1    nan 1

如何在每个月的月初将“1”加到所有列中? (注意我也想每季度做一次)数据框最终应该是这样的:

            A   B   C
date
2021-01-01  2   nan 2
2021-01-23  nan 1   1
2021-02-01  nan 1   1
2021-02-03  1   nan 1

月初的“nan”应与上个月的最后一个实例位于同一位置。

df[(df.index.is_month_end) & (df.index >= df.first_valid_index())]+=1

想通了。而且,对于季度,它将是 .is_quarter_end

IIUC 的逻辑,你可以这样做:

# ensure datetime
df.index = pd.to_datetime(df.index)

# fill missing starts of month
idx = pd.date_range(df.index.min(), df.index.max(), freq='MS')
df = df.reindex(df.index.union(idx))

# update starts of month
prev = df.shift(1).loc[idx] # get last data of previous month
df.loc[idx] = df.loc[idx].add(1).combine_first(prev) # increment/fill

输出:

              A    B    C
2021-01-01  2.0  NaN  2.0
2021-01-23  NaN  1.0  1.0
2021-02-01  NaN  1.0  1.0
2021-02-03  1.0  NaN  1.0