Hallo zusammen
ich versuche mich neu in pandas und benötige da Unterstützung.
Ich möchte zwei Zeilen Subtrahieren und Ergebnis in einer Spalte haben.
Date_Time;Time_delta
2020-01-01 12:00:00; 30
2020-01-01 12:30:00;90
2020-01-01 14:00:00;10
2020-01-01 14:10:00;
Kann mir bitte jemand sagen, wie man sowas in pandas macht.
diff. Zeile in einer Spalte einfügen
- __blackjack__
- User
- Beiträge: 14047
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Omm: Die Problembeschreibung ist mir nicht vollständig genug. Welche zwei Zeilen? Die Zeilen bestehen aus zwei Werten, in die neue Spalte kannst Du ja aber nur einen Wert eintragen. Und soll die gesamte Spalte aus diesem einen Wert bestehen, also für jede Zeile? Oder nur für die beiden die abgezogen wurden? Oder nur für eine der beiden? Was soll in den anderen Zeilen in der neuen Spalte stehen? 0? NaN?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
__blackjack__ entschuldige, dass ich zu ungenau war.
also immer gleich die eine Zeile darunter. D.h. das Datenset kommt nach Datum sortiert daher.
in der Spalte "Time_delta" soll nur die Subtraktion stehen.
(Time_delta(zeile1)) = (Date_Time(Zeile2) - Date_Time(Zeile1)) --> 30min
(Time_delta(zeile2) )= (Date_Time(Zeile3) - Date_Time(Zeile2)) --> 90min
in der letzten Zeile soll dann now() verwendet werden.
d.h. (Time_delta(zeileLast) )= ( now() - Date_Time(ZeileLast)) --> xxmin
Ein 0 oder NaN sollte so nirgends vorhanden sein.
Zeile; Date_Time; Time_delta
1; 2020-01-01 12:00:00; 30
2; 2020-01-01 12:30:00; 90
3; 2020-01-01 14:00:00; 10
4; 2020-01-01 14:10:00;
also immer gleich die eine Zeile darunter. D.h. das Datenset kommt nach Datum sortiert daher.
in der Spalte "Time_delta" soll nur die Subtraktion stehen.
(Time_delta(zeile1)) = (Date_Time(Zeile2) - Date_Time(Zeile1)) --> 30min
(Time_delta(zeile2) )= (Date_Time(Zeile3) - Date_Time(Zeile2)) --> 90min
in der letzten Zeile soll dann now() verwendet werden.
d.h. (Time_delta(zeileLast) )= ( now() - Date_Time(ZeileLast)) --> xxmin
Ein 0 oder NaN sollte so nirgends vorhanden sein.
Zeile; Date_Time; Time_delta
1; 2020-01-01 12:00:00; 30
2; 2020-01-01 12:30:00; 90
3; 2020-01-01 14:00:00; 10
4; 2020-01-01 14:10:00;
- __blackjack__
- User
- Beiträge: 14047
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Omm: Du suchst die `shift()`-Methode auf `Series`-Objekten:
Code: Alles auswählen
In [454]: df = pd.read_clipboard(delimiter="\s*;\s*", parse_dates=["Date_Time"])
In [455]: df
Out[455]:
Zeile Date_Time Time_delta
0 1 2020-01-01 12:00:00 30.0
1 2 2020-01-01 12:30:00 90.0
2 3 2020-01-01 14:00:00 10.0
3 4 2020-01-01 14:10:00 NaN
In [456]: ts = df["Date_Time"]
In [457]: df["Time_delta"] = ts.shift(-1, fill_value=pd.Timestamp.now()) - ts
In [458]: df
Out[458]:
Zeile Date_Time Time_delta
0 1 2020-01-01 12:00:00 0 days 00:30:00
1 2 2020-01-01 12:30:00 0 days 01:30:00
2 3 2020-01-01 14:00:00 0 days 00:10:00
3 4 2020-01-01 14:10:00 398 days 22:25:35.839196
In [459]: df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Zeile 4 non-null int64
1 Date_Time 4 non-null datetime64[ns]
2 Time_delta 4 non-null timedelta64[ns]
dtypes: datetime64[ns](1), int64(1), timedelta64[ns](1)
memory usage: 224.0 bytes
“Vir, intelligence has nothing to do with politics!” — Londo Mollari