Python pandas数据框中的增量分配,用于从不带日期元素的周数确定月份

Python pandas数据框中的增量分配,用于从不带日期元素的周数确定月份,python,pandas,numpy,Python,Pandas,Numpy,我在数据框中有从1到52的周数,例如[1,2,3,4,5,6,7,8,…52] 我正在尝试为月份创建一个新列,但这将意味着像[1,2,3,4]=1、[5,6,7,8]=2。。[49,50,51,52]=12 我尝试使用df[df[“week”]%4==0]以4的倍数获取记录,然后使用ffill获取记录,但似乎我们只能将其分配给同一个数字,这不是我想要的。相反,我想相应地分配[1..12]。还有其他方法吗?先减去1,然后使用整数除以4: df = pd.DataFrame({'week':rang

我在数据框中有从1到52的周数,例如
[1,2,3,4,5,6,7,8,…52]

我正在尝试为月份创建一个新列,但这将意味着像
[1,2,3,4]=1、[5,6,7,8]=2。。[49,50,51,52]=12


我尝试使用
df[df[“week”]%4==0]
以4的倍数获取记录,然后使用
ffill
获取记录,但似乎我们只能将其分配给同一个数字,这不是我想要的。相反,我想相应地分配[1..12]。还有其他方法吗?

先减去
1
,然后使用整数除以
4

df = pd.DataFrame({'week':range(1,53)})

df['new'] = (df["week"] - 1)//4 
print (df.head(10))
   week  new
0     1    0
1     2    0
2     3    0
3     4    0
4     5    1
5     6    1
6     7    1
7     8    1
8     9    2
9    10    2

print (df.tail(10))
    week  new
42    43   10
43    44   10
44    45   11
45    46   11
46    47   11
47    48   11
48    49   12
49    50   12
50    51   12
51    52   12
如果希望从
1
开始,则可以,但最后一个值是
13

df['new'] = ((df["week"] - 1)//4) + 1
print (df.head(10))
   week  new
0     1    1
1     2    1
2     3    1
3     4    1
4     5    2
5     6    2
6     7    2
7     8    2
8     9    3
9    10    3

print (df.tail(10))
    week  new
42    43   11
43    44   11
44    45   12
45    46   12
46    47   12
47    48   12
48    49   13
49    50   13
50    51   13
51    52   13
如果想要
1
12
之间的值(但有些组更像4个值),请使用@Aryerez提供的解决方案,谢谢:

df['new'] = ((df["week"] - 1) // (52 / 12)).astype(int) + 1

print (df.head(10))
   week  new
0     1    1
1     2    1
2     3    1
3     4    1
4     5    1
5     6    2
6     7    2
7     8    2
8     9    2
9    10    3

print (df.tail(10))
    week  new
42    43   10
43    44   10
44    45   11
45    46   11
46    47   11
47    48   11
48    49   12
49    50   12
50    51   12
51    52   12
编辑:对于第三组中的5个值,使用:

df['new'] = ((df["week"] + 4) // (52 / 12)).astype(int)

print (df.head(15))
    week  new
0      1    1
1      2    1
2      3    1
3      4    1
4      5    2
5      6    2
6      7    2
7      8    2
8      9    3
9     10    3
10    11    3
11    12    3
12    13    3
13    14    4
14    15    4


df['new']=(df[“week”]-1)/(52/12)+1
将在5周内为您提供2个月(1个月和7个月),因此月的范围将在1到12之间。这简直太棒了!我知道52不能很好地除以4周,有些人一个月就有5周。如果我想每3个月修正5周,我可以用数学方法做什么?@AhSheng-然后使用
df['new']=((df[“week”]+4)/(52/12))。astype(int)
print (df.tail(15))
    week  new
37    38    9
38    39    9
39    40   10
40    41   10
41    42   10
42    43   10
43    44   11
44    45   11
45    46   11
46    47   11
47    48   12
48    49   12
49    50   12
50    51   12
51    52   12