2017-10-19 60 views
0

我有它看起来像这样如何根据周日对熊猫行进行会话?

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 

一个熊猫数据帧我想根据工作日来sessionize每一行 我试过一个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

你是什么意思“如果数字在我的范围内”你的范围是什么。 – DJK

+0

我的范围=范围(1,1001,7) 对不起,我把它添加到代码 从1到7然后从8到14然后从15到21直到1001 –

+0

那么第一行,第四列怎么可能是3?那么这个值是126 – DJK

回答

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 
+0

我没有设置组行和过滤,你能说明更多,因为我不是得到我想要的输出,并感谢很多,它似乎很有趣,并关闭 –

+0

是否有像pd.cut,我可以在行 –

+0

行上使用,你应该一次打印一行。 “底部”是一个线性指数,我们使用一个地板除数来组成7,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0。现在只需在数据框上执行操作。最后,如果数据框在范围内,则保留该值并将所有其他值设置为零 – DJK

相关问题