熊猫选择过去的最近日期

Jan*_*Jan 3 python dataframe pandas

作为的初学者pandas,我想知道如何选择过去的最接近日期?例如,我有dataframe以下内容:

               Terminart                        Info     Datum  Ergebnis
0       Hauptversammlung                         NaN  22.06.16       NaN
1        Jahresabschluss                        2015  10.03.16       NaN
2         Quartalszahlen                     Q3 2015  28.10.15       NaN
3         Quartalszahlen                     Q2 2015  29.07.15       NaN
4       Hauptversammlung                         NaN  05.05.15       NaN
5         Quartalszahlen                     Q1 2015  29.04.15       NaN
6  Bilanzpressekonferenz                        2014  12.03.15       NaN
7  Bilanzpressekonferenz  Jahrespressekonferenz 2015  12.03.15       NaN
Run Code Online (Sandbox Code Playgroud)


我可以选择Terminartwith df.loc(),即:

df.loc[df['Terminart'] == 'Hauptversammlung']
Run Code Online (Sandbox Code Playgroud)

仅选择两行(正确)。


但是,如何选择过去的最接近日期?这将是第一行(06/22/16)吗?默认情况下,数据框未排序。

jez*_*ael 6

您可以转换to_datetimeDatum,然后首先将其过滤为无差异(timedelta = 0),然后通过idxmax以下公式找到最大值的索引:

注意:样品在上次日期时间更改以进行更好的测试

import pandas as pd
import datetime as dt

print (df)
                                     Terminart     Info     Datum  Ergebnis
0                             Hauptversammlung      NaN  22.06.16       NaN
1                              Jahresabschluss     2015  10.03.16       NaN
2                               Quartalszahlen  Q3 2015  28.10.15       NaN
3                               Quartalszahlen  Q2 2015  29.07.15       NaN
4                             Hauptversammlung      NaN  05.05.15       NaN
5                               Quartalszahlen  Q1 2015  29.04.15       NaN
6                        Bilanzpressekonferenz     2014  12.03.15       NaN
7  Bilanzpressekonferenz Jahrespressekonferenz     2015  19.07.16       NaN
Run Code Online (Sandbox Code Playgroud)
df['Datum'] = pd.to_datetime(df.Datum, format='%d.%m.%y')

date = dt.datetime.now().date()
print (date)
2016-07-17

diff = (df.Datum - date)
print (diff)
0    -25 days
1   -129 days
2   -263 days
3   -354 days
4   -439 days
5   -445 days
6   -493 days
7      2 days
Name: Datum, dtype: timedelta64[ns]

indexmax = (diff[(diff < pd.to_timedelta(0))].idxmax())

print (df.ix[[indexmax]])
          Terminart Info      Datum  Ergebnis
0  Hauptversammlung  NaN 2016-06-22       NaN
Run Code Online (Sandbox Code Playgroud)