如何转换
df = pd.DataFrame({'Stay Time':'Dec-Feb','Mar-May','Jun-Aug','Sep-Nov')})
到
'Stay Time':3,2,3,3,3
答案 0 :(得分:0)
我认为,您要计算的值是以月为单位的差额 在停留时间中给出的两个月之间(您的问题未能说明 准确)。
为了更具启发性,我的程序将结果保存在 mDiff 列中 (不是停留时间),并离开工作列:
import pandas as pd
def mDiff(m1, m2):
"""Difference in months"""
d = m2 - m1
return d if d > 0 else d + 12
# Month name -> Month No (mapping)
d = dict(zip(pd.date_range('2000-01-01', freq='M', periods=12)\
.strftime('%b'), range(1,13)))
# Source DataFrame
df = pd.DataFrame({'Stay Time': ['Dec-Feb','Mar-May','Jun-Aug','Sep-Nov']})
# Get month names
df['m1'], df['m2'] = df['Stay Time'].str.split('-', 1).str
# Convert month names to month numbers
df.m1 = df.m1.map(d)
df.m2 = df.m2.map(d)
# mDiff - difference in months
df['mDiff'] = df.apply(lambda row: mDiff(row['m1'], row['m2']), axis=1)
# Result
print(df)
结果是:
Stay Time m1 m2 mDiff
0 Dec-Feb 12 2 2
1 Mar-May 3 5 2
2 Jun-Aug 6 8 2
3 Sep-Nov 9 11 2
但是月份差异始终为 2 ,而不是 3 (在一种情况下为2), 如您提出的问题。 如果要以另一种方式计算月份差,请描述方法。
另一个奇怪的细节是:
您还应该说明造成这种差异的原因。
还请注意,为了符合Python语法,我必须进行更改 您的代码:
'Dec-Feb','Mar-May','Jun-Aug','Sep-Nov'
的列表必须
放在[
和]
中,)
(我删除了)。要获得想要的结果:
Stay Time
列中,