我有一个 df,我希望将 cumsum 限制在 0 到 6 的范围内。总和超过 6 将翻转为 0。adj_cumsum 列就是我想要得到的。我搜索并发现了一些使用循环的帖子,但是,由于我的更简单,因此想知道是否有更简单或更新的方法。
+----+-------+------+----------+----------------+--------+------------+ | | month | days | adj_days | adj_days_shift | cumsum | adj_cumsum | +----+-------+------+----------+----------------+--------+------------+ | 0 | jan | 31 | 3 | 0 | 0 | 0 | | 1 | feb | 28 | 0 | 3 | 3 | 3 | | 2 | mar | 31 | 3 | 0 | 3 | 3 | | 3 | apr | 30 | 2 | 3 | 6 | 6 | | 4 | may | 31 | 3 | 2 | 8 | 1 | | 5 | jun | 30 | 2 | 3 | 11 | 4 | | 6 | jul | 31 | 3 | 2 | 13 | 6 | | 7 | aug | 31 | 3 | 3 | 16 | 2 | | 8 | sep | 30 | 2 | 3 | 19 | 5 | | 9 | oct | 31 | 3 | 2 | 21 | 0 | | 10 | nov | 30 | 2 | 3 | 24 | 3 | | 11 | dec | 31 | 3 | 2 | 26 | 5 | +----+-------+------+----------+----------------+--------+------------+
data = {"month": ['jan','feb','mar','apr',
'may','jun','jul','aug',
'sep','oct','nov','dec'],
"days": [31,28,31,30,31,30,31,31,30,31,30,31]}
df = pd.DataFrame(data)
df['adj_days'] = df['days'] - 28
df['adj_days_shift'] = df['adj_days'].shift(1)
df['cumsum'] = df.adj_days_shift.cumsum()
df.fillna(0, inplace=True)
请多多指教
最佳答案
您正在寻找的称为模运算。
使用df['adj_cumsum'] = df['cumsum'].mod(7)
。
关于python - cumsum 限制在一个范围内(python,pandas),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72187189/