我有一个像这样的pandas数据框
0 1 2 3 4 5 6 7 8 9 ... 253 254 255 256 257 258 259 260 261 262
0 30 84 126 135 137 179 242 342 426 ... None None None None None None None None None None
1 24 53 75 134 158 192 194 211 213 ... None None None None None None None None None None
2 51 143 173 257 446 491 504 510 559 ... None None None None None None None None None None
3 1 20 22 92 124 149 211 335 387 ... None None None None None None None None None None
我想根据工作日来对每一行进行会话 我尝试了一个for循环,但我在时间和记忆方面遇到了问题
所以基本上我想要的是使用像这样的大小为7的步骤遍历每一行
range(1,1001,7)
检查号码是否在我当前的范围内
如果它没有归零,
如果它在我的范围内,则返回我的号码%7 + 1,
然后将属于同一范围的数字连接成一个列表
所以我最终应该有143列。
第一行应该是这样的
0 0 0 3 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 [3,5] 0 0 0 0 and so on
答案 0 :(得分:0)
<强> IIUC:强>
您可以设置要过滤的数据框
如果你有这样的数据框
df = pd.DataFrame(np.random.randint(0,30,(10,10)))
0 1 2 3 4 5 6 7 8 9
0 2 11 28 20 22 9 20 15 1 28
1 2 8 10 9 16 3 7 1 13 28
2 6 9 14 20 23 3 6 5 29 6
3 21 25 11 10 20 15 10 11 21 9
4 5 14 11 19 5 1 23 0 1 3
5 13 18 21 4 26 5 18 6 29 20
6 6 6 22 7 29 18 12 17 4 2
7 0 26 26 3 22 21 11 15 29 21
8 9 28 29 0 24 24 13 4 9 20
9 5 18 7 13 17 0 22 19 12 19
df['bottom'] = np.arange(0,len(df)) // 7 #set groups
df.iloc[:,:-1] = df.iloc[:,:-1]%7+1 #set values
df[(df <= df['bottom']+1) | (df >= df['bottom']+7)].fillna(0).astype(int) #filter
给出
bottom 0 1 2 3 4 5 6 7 8 9
0 0 0 0 1 0 0 0 0 2 2 1
1 0 0 0 0 0 0 0 1 2 0 1
2 0 0 0 1 0 0 0 0 0 2 0
3 0 1 0 0 0 0 0 0 0 1 0
4 0 0 1 0 0 0 0 0 1 2 0
5 0 0 0 1 0 0 0 0 0 2 0
6 0 0 0 0 1 0 0 0 0 0 0
7 0 1 0 0 0 0 1 0 2 2 1
8 0 0 1 0 1 0 0 0 0 0 0
9 0 0 0 1 0 0 1 0 0 0 0