Python pandas数据框中的增量分配,用于从不带日期元素的周数确定月份
我在数据框中有从1到52的周数,例如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,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