我有一个像这样的熊猫专栏:
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
答案 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