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
我有一个数据框:
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