如何在pandas行中对数据进行会话?

时间:2017-10-20 02:24:46

标签: python pandas numpy dataframe

我有一个pandas数据框,看起来像这样

    1   2   3   4   5   6   7   8   9   10  ... 253 254 255 256 257 258 259 260 261 262
0   30  84  126 135 137 179 242 342 426 456 ... None    None    None    None    None    None    None    None    None    None
1   24  53  75  134 158 192 194 211 213 238 ... None    None    None    None    None    None    None    None    None    None
2   51  143 173 257 446 491 504 510 559 616 ... None    None    None    None    None    None    None    None    None    None

所以基本上我想要的是使用像这样的大小为7的步骤遍历每一行

my_range = range(1,1002,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

我编写了这段代码并在列表上测试了它以显示我想要做的事情

z = [30,84,126,135,136,137,179,242,342,426]
c = []
def counter(maximum, inc):  # resetable generator from doc example
    i = 1
    while i < maximum:
        val = (yield i)
        # If value provided, change counter
        if val is not None:
            i = val
        else:
            i += inc


ig = counter(1002, 7)

for m in z:
    for i in ig:
        # catch multiple nums in same range
        if m < i:
            clast = c.pop()
            # inline if-else inside append converts int to tuple to add m to
            c.append((clast if type(clast) == tuple else (clast,)) + (m%7+1,))
            # reset ig count
            ig.send(i - 7)
            break

        if i <= m < i+7:
            c.append(m%7+1)
            break
        else:
            c.append(0)
# exhaust ig if you really want full count = 143
for i in ig:
    c.append(0)

print(len(c)) 

上面的代码输出

[0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, (3, 4, 5), 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

这就是每一行的样子

len(c) = 143

是否有一种简单的方法可以通过pandas行实现该代码,或者更好的方法在数据框上执行此操作?

提前致谢

0 个答案:

没有答案