我有一个下面的数据框,并想对具有该月最后一个工作日的数据框进行子集划分。

df =
Date Open High Low Close Adj Close Volume0 2007-06-18 0.33979 0.33979 0.33979 0.33979 0.33979 15918881 2007-06-29 0.33074 0.33074 0.33074 0.33074 0.33074 884402 2007-06-20 0.33526 0.33526 0.33526 0.33526 0.33526 35383 2007-06-21 0.32113 0.32113 0.32113 0.32113 0.32113 35504 2007-06-22 0.34713 0.34713 0.34713 0.34713 0.34713 670

df_output =

Date Open High Low Close Adj Close Volume1 2007-06-29 0.33074 0.33074 0.33074 0.33074 0.33074 88440

我已经尝试过df = pd.to_datetime(df['Date'], format='%Y%m%d') + pd.offsets.BMonthEnd(1),但是无法正常工作,并且我已经查看了here,但是没有找到正确的方法。谁能帮我解决这个问题。

最佳答案

您可以这样:

# in case Date is not in datetime format:
df['Date'] = pd.to_datetime(df['Date'])

df_output = df.loc[df.Date.isin(df.Date + pd.offsets.BMonthEnd(1))]


返回:

>>> df_output
        Date     Open     High      Low    Close  Adj Close  Volume
1 2007-06-29  0.33074  0.33074  0.33074  0.33074    0.33074   88440


说明:

df.Date + pd.offsets.BMonthEnd(1)返回每个月中您拥有数据的一系列最后一个工作日:

>>> df.Date + pd.offsets.BMonthEnd(1)
0   2007-06-29
1   2007-07-31
2   2007-06-29
3   2007-06-29
4   2007-06-29


然后,使用loc在数据框中找到该序列中实际Date所在的行(使用.isin

关于python - 子设置Python中数据框的每月最后一个工作日,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50686532/

10-10 21:36