使用数据集中的数字范围创建新的二进制列

时间:2017-08-22 19:08:29

标签: python pandas split binary

我在python中使用pandas库以获取以下内容:

我目前有一个如下所示的数据集:

ID       START      END
x         450       600
y         100       500
.          .         .

这里的开始和结束代表足迹,即船只从x点到y停在这里。

我想要做的是创建二进制列1,2 3 ...直到' END'中的最大值。如果该列号在' START'范围内,则显示1到'结束'

我想在这里完成的是查找所有足迹的总使用次数。现在我的方法是使用二进制列并将它们相加以获得总计数。

我也愿意采用更好的方法来解决我的问题。

edit_1:

我想要什么 -

ID       START      END    1   2   3  ...... 450 ..... 500 .... 600   601  
x         450       600    0   0   0          1         1        1     0
y         100       500    0   0   0          1         1        0     0
.          .         .

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望将值1循环到max('END'),并根据范围STARTEND生成真/假值。我想你想要的东西:

for i in range(1,df['END'].max()+1):
    df[i] = ((i >= df['START']) & (i <= df['END'])).astype(int)

但是,如果您只想弄清所有行&#34;重叠&#34;的步骤数,您可以这样做:

max((df['END'].min() - df['START'].max()), 0)

由于只有>= 'START'<= 'END'

的所有内容才会重叠