如何处理“ 12月至2月”,“ 3月至5月”,“ 6月至8月”,“ 9月至11月”

时间:2018-10-07 05:56:04

标签: python pandas

如何转换

df = pd.DataFrame({'Stay Time':'Dec-Feb','Mar-May','Jun-Aug','Sep-Nov')})

'Stay Time':3,2,3,3,3

1 个答案:

答案 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), 如您提出的问题。 如果要以另一种方式计算月份差,请描述方法。

另一个奇怪的细节是:

  • 源数据包含 4 对月份,
  • 但您希望结果包含 5 个数字。

您还应该说明造成这种差异的原因。

还请注意,为了符合Python语法,我必须进行更改 您的代码:

  • 字符串'Dec-Feb','Mar-May','Jun-Aug','Sep-Nov'的列表必须 放在[]中,
  • 您的代码中有一个多余的)(我删除了)。

要获得想要的结果:

  • 将最终结果保存到Stay Time列中,
  • 删除其余的列。