如何根据工作日对大熊猫中的行进行会话?

时间:2017-10-19 02:49:23

标签: python pandas numpy dataframe

我有一个像这样的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

1 个答案:

答案 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