繁体   English   中英

Pandas dataframe 将值替换为前一天的值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM