【发布时间】:2022-01-15 10:54:52
【问题描述】:
我有以下用例:
import pandas as pd
import numpy as np
# create dataframe
df = pd.DataFrame(data=np.random.rand(10, 3),
columns=['a', 'b'],
index=pd.date_range('2021-01-01', periods=10, freq='W-FRI'))
# data is random, I'm just saving time with copy paste first row
df
> a b
> 2021-01-01 0.272628 0.974373
> 2021-01-08 0.272628 0.974373
> 2021-01-15 0.272628 0.974373
> 2021-01-22 0.272628 0.974373
> 2021-01-29 0.272628 0.974373
> 2021-02-05 0.759018 0.443803
> 2021-02-12 0.759018 0.443803
> 2021-02-19 0.759018 0.443803
> 2021-02-26 0.759018 0.443803
> 2021-03-05 0.973900 0.929002
我想在重新采样时获得索引中的第一个匹配样本,但执行以下操作不起作用,请注意日期不在我的原始索引中:
df.resample('M').first()
> a b
> 2021-01-31 0.272628 0.160300
> 2021-02-28 0.759018 0.443803
> 2021-03-31 0.973900 0.929002
我想按月重新采样,但每次都取第一个匹配日期样本,即,我想要以下结果:
> a b
> 2021-01-01 0.272628 0.160300
> 2021-02-05 0.759018 0.443803
> 2021-03-05 0.973900 0.929002
我可以按如下方式进行破解,但这并不理想,它仅适用于这个玩具示例:
df.loc[list(np.diff(df.index.month.values, prepend=0) == 1)]
【问题讨论】:
标签: python pandas numpy pandas-resample