gpt4 book ai didi

python - Pandas 在选择前获得索引值 n 个位置

转载 作者:行者123 更新时间:2023-12-01 10:17:17 26 4
gpt4 key购买 nike

我有一个带有日期时间索引的数据框。我还有一个特定日期的列表,我有兴趣在我的数据框中查看这些日期。我想在我的特定日期列表之前获得“n”行位置。举个例子 n=5。这是我的代码:

import pandas as pd     

# generate an example df
output = pd.DataFrame()
d = pd.date_range(start='1/1/2000', end='1/1/2006', freq='D')
output['Date'] = d
output['Value'] = 1
output = output[output['Date'].dt.dayofweek < 5].reset_index(drop=True) # remove weekends
output = output.set_index('Date')

# dates of interest
date_list = pd.to_datetime(['09/05/2002', '15/07/2004', '21/03/2005'], format='%d/%m/%Y')

# i can pull out the dates of interest, but I really want the dates '5' positions ahead
selection = output.iloc[output.index.isin(date_list)]
print(selection)

请注意,提前“5”个位置与 timedelta(days=5) 不同

我知道这可以通过迭代来解决,比如:

for i, row in output.iterrows():
for i2 in date_list:
if i == i2:
print(i, output.loc[i2:].iloc[5])

但我希望使用矢量化单衬垫来理想地做到这一点。任何帮助将不胜感激?

非常感谢!

最佳答案

您可以使用 flatnonzero 获取索引,将 5 添加到它们并索引:

import numpy as np
output.iloc[np.flatnonzero(output.index[:-5].isin(date_list)) + 5]

Value
Date
2002-05-16 1
2004-07-22 1
2005-03-28 1

或者我们还有 pandas 的 nonzero:

output.iloc[output.index[:-5].isin(date_list).nonzero()[0]+5]

Value
Date
2004-07-08 1
2005-03-14 1

关于python - Pandas 在选择前获得索引值 n 个位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60170747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com