[英]Fill subsequent values of python pandas dataframe with zeros when a condition is met
當“Returns”列中的值小於“m”(例如 m=-0.5)時,我希望后續行僅在該月底之前填充零。 如何做到這一點? 提前致謝。
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
date_today = datetime.now()
days = pd.date_range(date_today, date_today + timedelta(365), freq='D')
np.random.seed(seed=1111)
data = np.random.randint(1, high=100, size=len(days))
df = pd.DataFrame({'test': days, 'Price': data})
df = df.set_index('test')
df['Returns']=df['Price'].pct_change()
使用numpy.where
和掩碼進行比較Returns
不太像m
和聚合Series.cummax
,按DatetimeIndex.to_period
每月shift
< m
:
np.random.seed(123)
date_today = datetime.now()
days = pd.date_range(date_today, date_today + timedelta(365), freq='D')
np.random.seed(seed=1111)
data = np.random.randint(1, high=100, size=len(days))
df = pd.DataFrame({'test': days, 'Price': data})
df = df.set_index('test')
df['Returns']=df['Price'].pct_change()
m = -0.5
m = (df['Returns'].lt(m)
.groupby(df.index.to_period('m'))
.transform(lambda x: x.shift().cummax())
.fillna(False))
df['Returns'] = np.where(m, 0, df['Returns'])
print (df)
Price Returns
test
2021-11-22 14:32:35.550767 29 NaN
2021-11-23 14:32:35.550767 56 0.931034
2021-11-24 14:32:35.550767 82 0.464286
2021-11-25 14:32:35.550767 13 -0.841463
2021-11-26 14:32:35.550767 35 0.000000
... ...
2022-11-18 14:32:35.550767 47 0.000000
2022-11-19 14:32:35.550767 90 0.000000
2022-11-20 14:32:35.550767 20 0.000000
2022-11-21 14:32:35.550767 27 0.000000
2022-11-22 14:32:35.550767 51 0.000000
[366 rows x 2 columns]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.