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

 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查找索引,按minidxmax查找值。
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/

10-12 18:00