作为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
)吗?默认情况下不会对数据框进行排序。
答案 0 :(得分:4)
您可以转换to_datetime
列Datum
,然后首先过滤低级别(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])