python之Pandas 数据框中的增量分配以确定没有日期元素的周数中的月份
不点
阅读:18
2024-09-07 23:24:14
评论:0
我在数据框中有从 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
编辑:对于每个第 3 组中的 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
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
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。