使用另一列的datetime填充,但进行了修改

2024-04-19 15:16:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧:

pd.DataFrame({"date": ["2018-12-21", "2018-12-22", "2018-05-04"], "price":[100,np.nan, 105]})

输出:

date       price
2018-12-21  100.0
2018-12-22  NaN
2018-05-04  105.0

我试图.fillna()通过计算价格的值,前一天的价格。所以在本例中,NaN值将被100填充,因为我们将NaN值的日期减去一天。你知道吗


Tags: 数据dataframedatenp价格nanpricepd
1条回答
网友
1楼 · 发布于 2024-04-19 15:16:10

用途:

df = pd.DataFrame({"date": ["2018-12-21", "2018-12-22", 
                            "2018-05-04","2018-05-05",
                            "2018-05-06","2018-05-09"], 
                   "price":[100,np.nan, 105, np.nan, 108, np.nan]})

print (df)

         date  price
0  2018-12-21  100.0
1  2018-12-22    NaN
2  2018-05-04  105.0
3  2018-05-05    NaN
4  2018-05-06  108.0
5  2018-05-09    NaN

df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date')

df['price'] = df['price'].combine_first(df['price'].shift(1, freq='d'))
#alternative
#df['price'] = df['price'].combine_first(df['price'].shift(1, freq='d'))
print (df)
            price
date             
2018-12-21  100.0
2018-12-22  100.0
2018-05-04  105.0
2018-05-05  105.0
2018-05-06  108.0
2018-05-09    NaN

如果需要重新计算最后一个非缺失值(不是前一天):

df['price'] = df['price'].ffill()
print (df)
         date  price
0  2018-12-21  100.0
1  2018-12-22  100.0
2  2018-05-04  105.0
3  2018-05-05  105.0
4  2018-05-06  108.0
5  2018-05-09  108.0

相关问题 更多 >