簡體   English   中英

滿足條件時用零填充 python pandas dataframe 的后續值

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM