如何根据时间是否在一个范围内创建由1或0填充的数组/数据框?

时间:2018-05-31 09:17:06

标签: python pandas loops time

基本上,我有一个 dataframe ,它有两列,都是几小时:

    0    1
 +-----+----+    
0|  11 | 12 |
 +-----+----+
1|   3 | 4  |
 +-----+----+
2|  11 | 12 |
 +-----+----+
3|   6 |  7 |
 +-----+----+
4|  16 | 16 |

     etc...

这有几千行。我想制作另一个包含列标题的数据框' 1'到' 24' (基于24小时的小时数)并且对于上面数据帧的每一行,如果小时时间在该范围内(包括),则显示1;如果小时在外,则显示0。

例如,上述数据框的第二行将是:

1   2   3   4   5   6   7   8 ......24
0   0   1   1   0   0   0   0 ......0

我想对第一个数据帧的每一行执行相同的操作,并附加到新的24小时数据框。

希望这是有道理的,有人可以提供帮助!如果它没有意义,很高兴进一步走向!也是我在这里发布的新手,所以不确定如何以合理的方式粘贴数据。

3 个答案:

答案 0 :(得分:1)

使用:

df = (pd.DataFrame([dict.fromkeys(range(a, b + 1), 1) for a, b in zip(df[0], df[1])])
        .reindex(columns=range(1, 25), fill_value=0)
        .fillna(0)
        .astype(int))

print (df)
   1   2   3   4   5   6   7   8   9  ...  16  17  18  19  20  21  22  23  24
0   0   0   0   0   0   0   0   0   0 ...   0   0   0   0   0   0   0   0   0
1   0   0   1   1   0   0   0   0   0 ...   0   0   0   0   0   0   0   0   0
2   0   0   0   0   0   0   0   0   0 ...   0   0   0   0   0   0   0   0   0
3   0   0   0   0   0   1   1   0   0 ...   0   0   0   0   0   0   0   0   0
4   0   0   0   0   0   0   0   0   0 ...   1   0   0   0   0   0   0   0   0

[5 rows x 24 columns]

答案 1 :(得分:1)

您可以通过创建数据框来比较和乘以值,即

temp = pd.DataFrame([np.arange(1,25)],index = df.index,)

begin = (temp.values>=df['0'].values[:,None]).astype(int)
end = (temp.values<=df['1'].values[:,None]).astype(int)


pd.DataFrame(begin*end,columns=np.arange(1,25))

    1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20  21  22  23  24
0   0   0   0   0   0   0   0   0   0   0   1   1   0   0   0   0   0   0   0   0   0   0   0   0
1   0   0   1   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
2   0   0   0   0   0   0   0   0   0   0   1   1   0   0   0   0   0   0   0   0   0   0   0   0
3   0   0   0   0   0   1   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
4   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   0

答案 2 :(得分:0)

这是另一种可能的解决方案:

<activity 
   androidd:name=".views.BowlerActivity" 
   android:theme="@style/AppTheme" />