Seite 1 von 1

diff. Zeile in einer Spalte einfügen

Verfasst: Dienstag 2. Februar 2021, 23:46
von Omm
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.

Re: diff. Zeile in einer Spalte einfügen

Verfasst: Mittwoch 3. Februar 2021, 00:00
von __blackjack__
@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?

Re: diff. Zeile in einer Spalte einfügen

Verfasst: Mittwoch 3. Februar 2021, 10:38
von Omm
__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;

Re: diff. Zeile in einer Spalte einfügen

Verfasst: Mittwoch 3. Februar 2021, 12:39
von __blackjack__
@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

Re: diff. Zeile in einer Spalte einfügen

Verfasst: Mittwoch 3. Februar 2021, 19:53
von Omm
__blackjack__ perfekt, genau das.
Vielen Dank.