我有一个DataFrame和Series条件,如下所示:
import pandas as pd
import numpy as np
dates = pd.date_range('20170801','20170805')
df = pd.DataFrame({'Sales:[5,10,15,20,25]'}, index = dates)
error_days = pd.Series([True, True,False, False, True], index=df.index)
所以df是
Sales
2017-08-01 5
2017-08-02 10
2017-08-03 15
2017-08-04 20
2017-08-05 25
error_days为
2017-08-01 True
2017-08-02 True
2017-08-03 False
2017-08-04 False
2017-08-05 True
如果原始销售额> 8,我会将那些error_days的销售额更改为8,因此df结果为
Sales
2017-08-01 5
2017-08-02 8
2017-08-03 15
2017-08-04 20
2017-08-05 8
怎么做?
我知道
df['sales'][error_days] = 8
将更改所有值,但我只想将销售额> 8更改为8。
顺便说一句,请不要在df中添加新列。
谢谢。
IIUC我们可以在这里使用Series.clip_upper():
In [12]: df.loc[error_days, 'Sales'] = df.loc[error_days, 'Sales'].clip_upper(8)
In [13]: df
Out[13]:
Sales
2017-08-01 5
2017-08-02 8
2017-08-03 15
2017-08-04 20
2017-08-05 8
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句