python之Pandas 数据框中的增量分配以确定没有日期元素的周数中的月份

不点 阅读:16 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 

如果想要 112 之间的值(但有些组有更多的 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 


标签:Python
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号