2016-08-04 20 views
1

Ich habe Daten von 5 Wochen (35 Tage) mit mir, wo die start_date (1-August-2016) der erste Tag der ersten Woche und end_date() die letzte ist Datum in der 5. Woche. Auch ich habe die stündlichen Daten von (zB 0 - 23).Index in Python basierend auf Zustand erstellen

day date(dd-mm-yyyy) hour 
1 01-01-2016  0 
1 01-01-2016  1 
1 01-01-2016  2 
1 01-01-2016  3 
1 01-01-2016  4 
1 01-01-2016  5 
1 01-01-2016  6 
. 
. 
1 01-01-2016  23 
. 
. 
35 04-02-2016  0 
35 04-02-2016  1 
. 
. 

und ich möchte erstellen und indizieren, dass es meine ausgewählten Stunden zählt bis (etwa 3 bis 5) und addiert 1 zu dem nächsten Index. Aber in dem Moment, in dem es nicht ausgewählte Stunden erreicht, sollte es seinen letzten Wert behalten. etwas wie das.

day date(dd-mm-yyyy) hour Index 
1 01-01-2016  0  1 
1 01-01-2016  1  1 
1 01-01-2016  2  1 
1 01-01-2016  3  2 
1 01-01-2016  4  3 
1 01-01-2016  5  4 
1 01-01-2016  6  5 
1 01-01-2016  7  5 
1 01-01-2016  8  5 
. 
. 
1 01-01-2016  23 5 
2 02-01-2016  0  5 
2 02-01-2016  1  5 
2 02-01-2016  2  5 
2 02-01-2016  3  6 
. 
35 04-02-2016  0 
35 04-02-2016  1 
. 
. 

Können wir dies in Python mit Schleifen tun. Möglicherweise müssen wir die Daten nach Tag, Datum und Uhrzeit sortieren. Ich weiß, das ist einfach, aber ich stecke fest. können wir auch eine Suche nach Datumsfolge erstellen?

Antwort

1

IIUC geben Sie verwenden können:

print (df) 
    day date(dd-mm-yyyy) hour 
0  1  01-01-2016  0 
1  1  01-01-2016  1 
2  1  01-01-2016  2 
3  1  01-01-2016  3 
4  1  01-01-2016  4 
5  1  01-01-2016  5 
6  1  01-01-2016  6 
7  1  01-01-2016 23 
8 35  04-02-2016  0 
9 35  04-02-2016  1 
10 35  04-02-2016  2 
11 35  04-02-2016  3 
12 35  04-02-2016  4 
13 35  04-02-2016  5 
14 35  04-02-2016  6 
15 35  04-02-2016  7 
#create list for lookup 
hours = [3,4,5] 
hours = hours + [hours[-1] + 1] 
print (hours) 
[3, 4, 5, 6] 

Werte überprüfen durch isin und dann cumsum:

print (df.hour.isin(hours)) 
0  False 
1  False 
2  False 
3  True 
4  True 
5  True 
6  True 
7  False 
8  False 
9  False 
10 False 
11  True 
12  True 
13  True 
14  True 
15 False 
Name: hour, dtype: bool 
df['Index'] = df.hour.isin(hours).cumsum() + 1 
print (df) 
    day date(dd-mm-yyyy) hour Index 
0  1  01-01-2016  0  1 
1  1  01-01-2016  1  1 
2  1  01-01-2016  2  1 
3  1  01-01-2016  3  2 
4  1  01-01-2016  4  3 
5  1  01-01-2016  5  4 
6  1  01-01-2016  6  5 
7  1  01-01-2016 23  5 
8 35  04-02-2016  0  5 
9 35  04-02-2016  1  5 
10 35  04-02-2016  2  5 
11 35  04-02-2016  3  6 
12 35  04-02-2016  4  7 
13 35  04-02-2016  5  8 
14 35  04-02-2016  6  9 
15 35  04-02-2016  7  9 
+0

Können Sie füge die gewünschte aus aus meiner Probe zu fragen? – jezrael

+0

erledigt, können Sie bitte die Zeile überprüfen, wo der Tag bei 2 beginnt, idealerweise sollte es 5 sein, aber in Ihrem Code wird der Moment, in dem es 0 trifft, ein Eintrag hinzufügen. – Mukul

+0

Super, siehe Bearbeiten. – jezrael

0

Sie können einen Zähler verwenden, der wie folgt aussehen sollte, abhängig davon, wie Ihre Daten strukturiert sind. Ich nehme an, dass Sie eine Liste der Stunden erstellt haben?

 hours = [0,1,2,3,4,5...,23]

Sie könnten eine Liste machen, was du so für Schleife durch die Auswahlliste

 select = [3,4,5] //This is your selection list.

Dann wird eine finden wollen laufen.

 
count = 0 
for i in select: 
    if i in hours: 
     count+=1 

Also, wenn Sie für den Rest der Woche zählen mögen, können Sie durch die Gesamtzahl der Tage multipliziert, die ich wäre Anzahl der Tage in einer Woche durch die Anzahl der Wochen multipliziert nehmen.

 

    count = count*7*5 

Es tut mir leid, wenn diese Antwort Ihre Anforderungen nicht erfüllt, kann ich nicht Kommentare hinzufügen noch! Aber dies ist die beste kann ich

Verwandte Themen