从 Pandas 数据帧中提取时间段变化
Extracting a time period changing from a Pandas dataframe
我正在尝试找到一种方法来提取日期列开始更改时间频率的日期单元格。在本例中,它是 2021-06-30
。关于如何在 pandas 方法中执行此操作的任何建议?
df1 = pd.DataFrame(pd.date_range(start='2021-07', end='2025-07', freq='Y'))
df2 = pd.DataFrame(pd.date_range(start='2020-07', end='2021-07', freq='M'))
pd.concat([df2, df1]).reset_index(drop = True)
Answer: 2021-06-30
0
0 2020-07-31
1 2020-08-31
2 2020-09-30
3 2020-10-31
4 2020-11-30
5 2020-12-31
6 2021-01-31
7 2021-02-28
8 2021-03-31
9 2021-04-30
10 2021-05-31
11 2021-06-30
12 2021-12-31
13 2022-12-31
14 2023-12-31
15 2024-12-31
由于频率是逐月变化的,所以可以判断连续相差超过31天的日期。
df = pd.concat([df2, df1]).reset_index(drop = True)
df.loc[df[0].diff(1).apply(lambda d: d.days > 31).idxmax()-1]
这给出了 2021-06-30
作为输出。 df[0].diff(1)
计算连续日期的差异,然后我们检查差异何时超过 31 天。 idxmax()
将 return 第一个日期,距离上一个日期超过 31 天,因此我们必须将它减少 1。
我正在尝试找到一种方法来提取日期列开始更改时间频率的日期单元格。在本例中,它是 2021-06-30
。关于如何在 pandas 方法中执行此操作的任何建议?
df1 = pd.DataFrame(pd.date_range(start='2021-07', end='2025-07', freq='Y'))
df2 = pd.DataFrame(pd.date_range(start='2020-07', end='2021-07', freq='M'))
pd.concat([df2, df1]).reset_index(drop = True)
Answer: 2021-06-30
0
0 2020-07-31
1 2020-08-31
2 2020-09-30
3 2020-10-31
4 2020-11-30
5 2020-12-31
6 2021-01-31
7 2021-02-28
8 2021-03-31
9 2021-04-30
10 2021-05-31
11 2021-06-30
12 2021-12-31
13 2022-12-31
14 2023-12-31
15 2024-12-31
由于频率是逐月变化的,所以可以判断连续相差超过31天的日期。
df = pd.concat([df2, df1]).reset_index(drop = True)
df.loc[df[0].diff(1).apply(lambda d: d.days > 31).idxmax()-1]
这给出了 2021-06-30
作为输出。 df[0].diff(1)
计算连续日期的差异,然后我们检查差异何时超过 31 天。 idxmax()
将 return 第一个日期,距离上一个日期超过 31 天,因此我们必须将它减少 1。