Ich muss die Werte der Zeilen basierend auf den Werten einer anderen Spalte subtrahieren. Meine Datenrahmen sieht wie folgt aus:Optimale Möglichkeit, Zeilen basierend auf Spaltenwerten in Python zu subtrahieren
Id | col1 | col2 | col3 |
1 | 2016-01-02 | 7:00:00 | Yes |
1 | 2016-01-02 | 7:05:00 | No |
1 | 2016-01-02 | 7:10:00 | Yes |
1 | 2016-01-02 | 8:00:00 | No |
2 | 2016-01-02 | 7:10:00 | Yes |
2 | 2016-01-02 | 7:50:00 | No |
2 | 2016-01-02 | 9:00:00 | No |
2 | 2016-01-02 | 9:10:00 | No |
2 | 2016-01-02 | 9:15:00 | No |
3 | 2016-01-02 | 6:05:00 | Yes |
3 | 2016-01-02 | 6:10:00 | Yes |
3 | 2016-01-02 | 6:20:00 | Yes |
3 | 2016-01-02 | 6:45:00 | No |
Ich brauche die durchschnittliche Zeitdifferenz in der Kombination von col1
und col2
auf den Wert der col3
zu berechnen. Die Regel lautet:
Wann immer es eine
Yes
incol3
ist tunrow-next row
Eine vereinfachte Version von dem, was ich bisher getan haben, ist eine Schleife durch alle Werte in der Datenrahmen und tun dies :
for i in range(len(df)):
if df['col3'][i] == 'Yes':
date1 = datetime.combine(df['col1'][i], df['col2'][i])
date2 = datetime.combine(df['col1'][i+1], df['col2'][i+1])
dict[df['Id'][i]] = date1-date2
Die Variable dict
ist nur ein Wörterbuch, das die Ergebnisse für jede unterschiedliche Id
hält.
Da ich mehr als 6MM Reihen habe, benötigt die Schleife viel Zeit, so dass ich mich gefragt habe, ob jemand eine effizientere und elegantere Lösung finden könnte.
Danke!
Ja, viel mehr sauber und schnell. Kannst du bitte die mul Funktion erklären? Ich schaue mir die Dokumentation an, aber ich kann nicht verstehen, was es tut. https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.mul.html –
Sie können ['Series.mul'] (http://pandas.pydata.org/pandas -docs/stable/generated/pandas.Series.mul.html), es ist einfach ein Vielfaches von 1 wenn "Ja" und von "0" wenn nicht "Ja". – jezrael