我有一个熊猫数据框
df = code mapper version country range month value
1 ABC321 ABC Alpha USA High 2021-10 8.0
6 ABC321 ABC Alpha USA High 2021-11 1.0
2 ABC321 PQS Beta IND LOW 2021-10 0.0
3 ABC321 TRR Delta MEX LOW 2021-10 1.0
4 ABC321 TRR Delta MEX LOW 2021-11 3.0我根据条件掩码行,并将值设为零。
mask = (
(df.mapper == 'ABC')
& (df.version == 'Alpha')
& (df.country == 'USA')
& (df.range == 'High')
& (df.month == '2021-10')
)
df.value = df.mask(mask, 0.0).value这使得df成为
code mapper version country range month value
1 ABC321 ABC Alpha USA High 2021-10 0.0
6 ABC321 ABC Alpha USA High 2021-11 1.0
2 ABC321 PQS Beta IND LOW 2021-10 0.0
3 ABC321 TRR Delta MEX LOW 2021-10 1.0
4 ABC321 TRR Delta MEX LOW 2021-11 3.0现在我想将掩码值"8“更新为"0”添加到下个月,
expected_output = code mapper version country range month value
1 ABC321 ABC Alpha USA High 2021-10 0.0
6 ABC321 ABC Alpha USA High 2021-11 9.0
2 ABC321 PQS Beta IND LOW 2021-10 0.0
3 ABC321 TRR Delta MEX LOW 2021-10 1.0
4 ABC321 TRR Delta MEX LOW 2021-11 3.0
EDIT
There won't be duplicate rows发布于 2021-10-26 05:49:39
一种想法是将值转换为月份期间,因此对于匹配上个月或下个月,仅使用+ 1或- 1:
df['month'] = pd.to_datetime(df['month']).dt.to_period('m')
mask = (
(df.mapper == 'ABC')
& (df.version == 'Alpha')
& (df.country == 'USA')
& (df.range == 'High')
& (df['month'] == '2021-10')
)
mask1 = (
(df.mapper == 'ABC')
& (df.version == 'Alpha')
& (df.country == 'USA')
& (df.range == 'High')
& (df['month'] - 1 == '2021-10')
)
df.loc[mask1, 'value'] += next(iter(df.loc[mask, 'value']), 0)
df.loc[mask, 'value'] = 0
print (df)
code mapper version country range month value
1 ABC321 ABC Alpha USA High 2021-10 0.0
6 ABC321 ABC Alpha USA High 2021-11 9.0
2 ABC321 PQS Beta IND LOW 2021-10 0.0
3 ABC321 TRR Delta MEX LOW 2021-10 1.0
4 ABC321 TRR Delta MEX LOW 2021-11 3.0https://stackoverflow.com/questions/69717936
复制相似问题