[英]Pandas dataframe replace values with the day before value
我正在尝试用前一天的值替换基于条件的值
我的代码:
import pandas as pd
import random
d = {
'year' : [2000,2000,2000,2001,2001,2001],
'month' : [1,1,1,2,2,2],
'day' : [1,1,1,2,2,2],
'ghi': [random.randint(700,1000) for i in range(6)],
'location' : ['Jeddah','Dammam','Taif','Jeddah','Dammam','Taif']
}
df = pd.DataFrame(data=d)
df['date'] = pd.to_datetime(df.loc[:,['year', 'month', 'day']])
df = df.sort_values('date').reset_index(drop=True)
df.set_index('date', inplace=True)
df.drop(['year', 'month', 'day'], axis = 1, inplace=True)
生成以下 dataframe:
ghi location
date
2000-01-01 800 Jeddah
2000-01-01 700 Dammam
2000-01-01 700 Taif
2001-02-02 950 Jeddah
2001-02-02 990 Dammam
2001-02-02 750 Taif
假设如果ghi > 900
我将在前一天更改相同位置
我试图在前一天获取符合条件的记录,但我找不到仅获取同一位置的结果的方法
x = df[df['ghi'] > 900]
day_before = x.index - pd.Timedelta('1 Day')
我想要的 output:
ghi location
date
2000-01-01 800 Jeddah
2000-01-01 700 Dammam
2000-01-01 700 Taif
2001-02-02 800 Jeddah
2001-02-02 700 Dammam
2001-02-02 750 Taif
先感谢您
您可以用np.nan
替换大于 900 的ghi
值。 然后groupby
"location" 并使用ffill
方法通过将前一天的ghi
值传播到第二天来填充 NaN 值:
df.loc[df['ghi']>900, 'ghi'] = np.nan
df['ghi'] = df.groupby('location').ffill().astype(int)
Output:
ghi location
date
2000-01-01 800 Jeddah
2000-01-01 700 Dammam
2000-01-01 700 Taif
2001-02-02 800 Jeddah
2001-02-02 700 Dammam
2001-02-02 750 Taif
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.