基本上,我有一个 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小时数据框。
希望这是有道理的,有人可以提供帮助!如果它没有意义,很高兴进一步走向!也是我在这里发布的新手,所以不确定如何以合理的方式粘贴数据。
答案 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" />