从熊猫数据框中提取与月日列表相对应的行

时间:2019-05-08 15:17:35

标签: python pandas python-datetime

必须先问过这个问题,但我找不到我要的东西,如果重复的话很抱歉。我有一个数据框df,其中索引位于python日期时间:

1982-01-01  [282.7945979191705, 279.12373352050776, 277.74...
1982-01-02  [279.12373352050776, 277.7481374216604, 278.21...
1982-01-03  [277.7481374216604, 278.21691274118945, 276.85...
1982-01-04  [278.21691274118945, 276.85932268415183, 273.1...
1982-01-05  [276.85932268415183, 273.12550555218706, 273.4...
...
2001-12-27  [277.50443007919813, 274.45894647954583, 274.6...
2001-12-28  [274.45894647954583, 274.6708258324927, 275.59...
2001-12-29  [274.6708258324927, 275.59033873840997, 274.35...
2001-12-30  [275.59033873840997, 274.3595948271699, 274.92...
2001-12-31  [274.3595948271699, 274.92645028921316, 283.02...

现在我有一个月日dates的列表,我希望使用以下列表进行过滤:

Index(['01-08', '01-23', '02-07', '02-22', '03-09', '03-24', '04-08', '04-23',
       '05-08', '05-23', '06-07', '06-22', '07-07', '07-22', '08-06', '08-21',
       '09-05', '09-20', '10-05', '10-20', '11-04', '11-19', '12-04', '12-19'],
      dtype='object')

如何从数据框中提取与这些日期相对应的所有行?我尝试了df.loc[dates],但这不起作用。

2 个答案:

答案 0 :(得分:3)

使用strftime

yourdf=df[df.index.strftime('%m-%d').isin(dates)].copy()

答案 1 :(得分:0)

您的dates是Pandas系列的Objects类型。您不能直接比较日期时间序列和对象序列。

相反,您应该首先使用数据框的索引来创建“ object”类型的新列,其中包含相应的月份和日期。

df['month-day'] = pd.DatetimeIndex(df.index).month.astype(str).str.zfill(2)  + "-" + pd.DatetimeIndex(df.index).day.astype(str).str.zfill(2) 

之后,您可以使用此新的month-day列进行过滤:

df[df["month-day"].isin(dates)]