我有一个像这样的熊猫专栏:
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
最佳答案
您可以转换列to_datetime
,然后按max
查找索引,按min
和idxmax
查找值。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
关于python - 从 Pandas 列获取最低和最高日期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51512416/