熊猫选择过去最近的日期

时间:2016-07-17 09:58:30

标签: python pandas dataframe

作为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

<小时/> 我可以选择Terminart df.loc(),即:

df.loc[df['Terminart'] == 'Hauptversammlung']

只选择两行(这是正确的)

<小时/> 但是,如何选择过去的最近日期?这将是第一行(06/22/16)吗?默认情况下不会对数据框进行排序。

2 个答案:

答案 0 :(得分:4)

您可以转换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
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

答案 1 :(得分:0)

首先,您将列“基准”转换为包含to_datetime()的日期字段,然后您可以按日期使用sort_values()对数据框进行排序,然后打印出第一行:

df['Datum'] = pd.to_datetime(df['Datum'], format='%d.%m.%y')
df.sort_values('Datum')
print(df.iloc[0])