从熊猫列获取最低和最高日期

时间:2018-07-25 06:44:52

标签: python pandas datetime dataframe

我有一个像这样的熊猫专栏:

 yrmnt
--------
2015 03
2015 03
2013 08
2015 08
2014 09
2015 10
2016 02
2015 11
2015 11
2015 11
2017 02

如何获取最低的年份月份组合:2013 08和最高的月份组合:2017 02

找出这两个月之间的差异,即40

1 个答案:

答案 0 :(得分:4)

您可以转换列to_datetime,然后按max查找索引,按idxmax查找min值,然后 idxmin

a = pd.to_datetime(df['yrmnt'], format='%Y %m')
print (a)
0    2015-03-01
1    2015-03-01
2    2013-08-01
3    2015-08-01
4    2014-09-01
5    2015-10-01
6    2016-02-01
7    2015-11-01
8    2015-11-01
9    2015-11-01
10   2017-02-01
Name: yrmnt, dtype: datetime64[ns]

print (df.loc[a.idxmax(), 'yrmnt'])
2017 02
print (df.loc[a.idxmin(), 'yrmnt'])
2013 08

month s中的差异:

b = a.dt.to_period('M')
d = b.max() - b.min()
print (d)
42

另一种解决方案仅适用于Series.dt.to_period创建的月份:

b = pd.to_datetime(df['yrmnt'], format='%Y %m').dt.to_period('M')
print (b)
0    2015-03
1    2015-03
2    2013-08
3    2015-08
4    2014-09
5    2015-10
6    2016-02
7    2015-11
8    2015-11
9    2015-11
10   2017-02
Name: yrmnt, dtype: object

然后通过Period.strftime最小值和最大值转换为自定义格式:

min_d = b.min().strftime('%Y %m')
print (min_d)
2013 08

max_d = b.max().strftime('%Y %m')
print (max_d)
2017 02

并减去差异:

d = b.max() - b.min()
print (d)
42