Here's one way using set_index and reindex
In [4971]: df.set_index('hr').reindex(range(24)).fillna(0).assign(app='DNS').reset_index()
Out[4971]:
hr counts app
0 0 0.0 DNS
1 1 0.0 DNS
2 2 1.0 DNS
3 3 0.0 DNS
4 4 0.0 DNS
5 5 0.0 DNS
6 6 0.0 DNS
7 7 0.0 DNS
8 8 0.0 DNS
9 9 0.0 DNS
10 10 0.0 DNS
11 11 0.0 DNS
12 12 0.0 DNS
13 13 2.0 DNS
14 14 0.0 DNS
15 15 0.0 DNS
16 16 0.0 DNS
17 17 0.0 DNS
18 18 0.0 DNS
19 19 0.0 DNS
20 20 0.0 DNS
21 21 0.0 DNS
22 22 0.0 DNS
23 23 0.0 DNS
Details
In [4954]: df
Out[4954]:
hr counts app
0 2 1 DNS
1 13 2 DNS
Steps
Showing only top 5 rows for brevity
In [4974]: df.set_index('hr&