如何计算不考虑年份的月循环差?

2024-10-02 12:24:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图计算月份之间的循环距离,以了解两个进程之间的解耦合。所以我有一个数据框,其中有一些列,我不会用循环的方式计算它们之间的差异。月份不是日期,而是从1到12的数字。 比如说

month1 month2
  6      8
  12     3
  8      5
  1      11

如果我真的这么做

month2 - month1我有一些问题:

8 - 6 = 2和{}都可以,但是

3 - 12 = -9和{},应分别为3和{}(12月和3月之间的差异,以及1月和11月之间的差异)

所以我试着

^{pr2}$

但是开始和结束必须是日期,而且似乎不可能仅仅用月份忽略年份和日期来定义日期。如果我将month1和month2定义为日-月-年的日期,那么12月和1月之间的差将是11,而不是我需要的1。在

所以可以把数字定义为月份?或者类似于使用monthmod而不管年份的东西?或者只是用其他方法来做? 有什么建议吗?在


Tags: 数据方法距离定义进程方式数字差异
2条回答

您可以使用:

def diff(month1, month2):
    m_min = min(month1, month2)
    m_max = max(month1, month2)
    diff = m_max - m_min
    return diff if diff <= 6 else m_min + 12 - m_max

从而得到预期的结果:

^{pr2}$

对更新后的问题的回答:

这应该是有效的:

def diff_between_months(month1, month2):
  diff = month1 - month2
  if diff > 6:
    diff = diff - 12
  if diff < -6:
    diff = diff + 12
  return diff

或者用更少的行数:

^{pr2}$

返回:

>>> diff_between_months(1,11)
2
>>> diff_between_months(11,1)
-2
>>> diff_between_months(12,3)
-3
>>> diff_between_months(3,12)
3
>>> diff_between_months(1,7)
-6
>>> diff_between_months(7,1)
6

其中,diff_between_months(1,7)中的减号可以通过将if diff < -6更改为if diff <= -6来修复。在

对老问题的回答(月份之间的绝对差异):

min(abs(month1 - month2), month1 - month2 + 12, month2 - month1 + 12)应该能做到。在

作为函数:

def diff_between_months(month1, month2):
  return(min(abs(month1 - month2), month1 - month2 + 12, month2 - month1 + 12))

这就回来了

>>> diff_between_months(1,11)
2
>>> diff_between_months(11,1)
2
>>> diff_between_months(6,6)
0
>>> diff_between_months(6,9)
3
>>> diff_between_months(6,12)
6
>>> diff_between_months(5,12)
5
>>> diff_between_months(7,12)
5
>>> diff_between_months(1,12)
1
>>> diff_between_months(12,1)
1

如果出于某种原因,您的月份可能大于12,请添加[month1, month2] = [month1 % 12, month2 % 12]

相关问题 更多 >

    热门问题