2017-10-05 3 views
0

Ich habe eine dfSplit Datenrahmen Säule in verschiedene Spalten basierend auf Zustand

id store_name open_timings 
1  abc  9 TO 1 -4 TO 11 
2  bcd  8 TO 11 - 1 TO 3 
3  xyz  8 TO 2 
4  qwe  9 TO 2-4 TO 7 

ich diese df zu formatieren will, so dass ich erstellen 3 weitere Spalten start_time,end_time,closed_time.

d.h

id store_name start_time end_time closed_time 
1  abc   9    11   1-4 
2  bcd   8    3   11-1 
3  xyz   8    2   None 
4  qwe   9    7   2-4 

wenn möglich kann ich konvertieren diese Spalten in 24-Stunden-Format, so etwas wie dieses.

id store_name start_time end_time closed_time 
1  abc   9:00   11:00   13:00-16:00 
2  bcd   8:00   15:00   11:00 -13.00 
3  xyz   8:00   14:00   nan 
4  qwe   9:00   19:00   14:00-16:00 

Der zweite Teil ist optional,

Gibt es eine Möglichkeit, dies zu bekommen?

ich habe einen Weg, um die Spalte open_timings in 2 durch

df['temp1'], df['temp'] = df['open_timings'].str.split('-', 1).str 

kann aber nicht bekommen Vergangenheit, die zu spalten.

Antwort

2

können Sie tun str.split dh

ndf = df['open_timings'].str.split('TO',expand=True).rename(columns={0:"start_time", 1:'closed_time' , 2:'end_time'}) 
af = pd.concat([df,ndf],1) 
 
    id store_name  open_timings start_time closed_time end_time 
0 1  abc 9 TO 1 -4 TO 11   9  1 -4  11 
1 2  bcd 8 TO 11 - 1 TO 3   8  11 - 1   3 
2 3  xyz   8 TO 2   8   2  None 
3 4  qwe  9 TO 2-4 TO 7   9   2-4   7 

Um die Spalten fallen Sie tun können, af = af.drop(['open_timings'],1)

closed_time gewisse Zweideutigkeit hat aber für start_time und end_time können wir verwenden

for i in cols: 
    if i == 'start_time': 
     hr = 0 
    else: 
     hr = 12 
    af[i] = pd.to_datetime(af[i], format='%H') 
    af[i] = af[i].apply(lambda x : np.where(pd.isnull(x),np.nan,"{}:{}".format(x.hour+hr,x.minute))) 
 
    id store_name start_time closed_time end_time 
0 1  abc  9:0  1 -4  23:0 
1 2  bcd  8:0  11 - 1  15:0 
2 3  xyz  8:0   2  nan 
3 4  qwe  9:0  2-4  19:0 
+0

Schön, für die Konvertierung in Zeitformat, sollte ich pd.to_datetime verwenden? – Shubham

+0

Ohne zu wissen "bin" oder "Uhr", wie können wir es in 24 Stunden Datetime konvertieren. Es schafft Ambiguität – Dark

+0

Das ist der Trick, denke ich, alle Startzeitwerte als AM, und Endzeit als PM, ich bin unsicher auf Closed_time Teil – Shubham

Verwandte Themen