必须先问过这个问题,但我找不到我要的东西,如果重复的话很抱歉。我有一个数据框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]
,但这不起作用。
答案 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)]