在熊猫数据框中删除某些观测值(时间序列)的简便方法?

问题描述 投票:2回答:2

我有apandas数据框,其中有一个名为“ date”的列,其格式为YYQQ,例如1702。

该列是一个时间序列。但是,有一些遗漏的观察结果。例如,下面的数据框在日期1702被破坏。我有多个这样的数据框,每个数据框在不同的日期被破坏。我只想知道中断后的日期。在下面的示例中,我只想要1702年及以后的行。是否有一种简单而有效的方法?

date
1301
1302
1303
1304
1401
1702
1703
1704
1801
1802
python pandas row
2个回答
0
投票

您的问题有点模棱两可-我不确定为什么1702特别会算作中断,因此我假设您已经从其他地方知道该日期。在这种情况下,您可以尝试以下操作:

sub_df = my_df[my_df.date >= 1702]

这将创建一个新的数据框对象,该对象仅由指示1702年或之后年份的行组成。


0
投票

首先,让我们重新创建您的数据框并创建新列,以分别表示每个日期的年(YY)和四分之一(QQ):

import pandas as pd

df = pd.DataFrame({'date': [1301,1302,1303,1304,1401,1702,1703,1704,1801,1802]})

df[['YY','QQ']] = df['date'].astype(str).str.extract(r'(\d{2})(\d{2})')

现在我们有:

   date  YY  QQ
0  1301  13  01
1  1302  13  02
2  1303  13  03
3  1304  13  04
4  1401  14  01
5  1702  17  02
6  1703  17  03
7  1704  17  04
8  1801  18  01
9  1802  18  02

让我们将每个季度转换为该季度中的一个月,然后我们可以转换回datetime系列,并找到超过3个月的第一次时差。最后,我们可以根据满足此布尔掩码(即中断)的第一个索引对数据帧进行切片:

df['MM'] = df['QQ'].astype(int)*3

df['date_t'] = pd.to_datetime(df['YY'].astype(str)+df['MM'].astype(str), format='%y%m')

df.iloc[df[df['date_t'].diff().astype('timedelta64[M]')>3].index[0]:]

收益率:

   date  YY  QQ  MM     date_t
5  1702  17  02   6 2017-06-01
6  1703  17  03   9 2017-09-01
7  1704  17  04  12 2017-12-01
8  1801  18  01   3 2018-03-01
9  1802  18  02   6 2018-06-01
© www.soinside.com 2019 - 2024. All rights reserved.