diff. Zeile in einer Spalte einfügen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Omm
User
Beiträge: 90
Registriert: Samstag 7. April 2018, 14:05

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.
Benutzeravatar
__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
Omm
User
Beiträge: 90
Registriert: Samstag 7. April 2018, 14:05

__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;
Benutzeravatar
__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
Omm
User
Beiträge: 90
Registriert: Samstag 7. April 2018, 14:05

__blackjack__ perfekt, genau das.
Vielen Dank.
Antworten