Seite 1 von 1

Pandas dataframe - Wert aus vorhergehender Zeile kopieren

Verfasst: Mittwoch 5. Dezember 2018, 16:23
von thorsten97
Hallo,

Ich habe einen Pandas Dataframe und möchte gerne unter bestimmten Bedingungen den Wert der vorhergehenden Zeile verwenden und Ihn als neuen Wert setzen.

Ich vermute mal mein Ansatz mit "shift" ist nicht der Richtige. Es wäre klasse wenn mir jemand von euch etwas unter die Arme greifen könnte.


Danke!

Code: Alles auswählen

import pandas as pd

df = pd.DataFrame({"A":[1,1,1,2,2,2,1,1,1],"B":[2,5,12,1,1,1,18,2,2]})
df["C"] = df["B"]
df.loc[df.A < df.B, "C"] = df["C"].shift(1)
Ausgabe:

Code: Alles auswählen

   A   B     C
0  1   2   NaN
1  1   5   2.0
2  1  12   5.0 #hier sollte 2.0 stehen weil ja in der vorhergehenden  Zeile 2.0 stand 
3  2   1   1.0  
4  2   1   1.0
5  2   1   1.0
6  1  18   1.0
7  1   2  18.0 # hier sollte 1.0 stehen weil ja in der vorhergehenden  Zeile 1.0 stand 
8  1   2   2.0 # hier sollte 1.0 stehen 

Re: Pandas dataframe - Wert aus vorhergehender Zeile kopieren

Verfasst: Mittwoch 5. Dezember 2018, 16:26
von __deets__
Da fehlt völlig eine Entscheidungsgrundlage WARUM du in welchen Zeilen den Wert der Zeile davor haben willst. Das müsste mal als erstes definiert werden.

Re: Pandas dataframe - Wert aus vorhergehender Zeile kopieren

Verfasst: Mittwoch 5. Dezember 2018, 16:59
von thorsten97
wenn df.loc[df.A < df.B, "C"] ist möchte ich in dieser Zeile den vorherigen Wert von "C" bekommen und in der aktuellen Zeile als "C" setzen.

Re: Pandas dataframe - Wert aus vorhergehender Zeile kopieren

Verfasst: Mittwoch 5. Dezember 2018, 17:29
von __deets__
Wieso ist in der Zeile 1 (und folgerichtig dann auch 2) dann nicht NaN? Die Bedingung A < B trifft doch zu. Und gilt das dann auch fuer Zeile 6, nur dass du das nicht beschrieben hast, weil der Wert schon stimmt?

Re: Pandas dataframe - Wert aus vorhergehender Zeile kopieren

Verfasst: Mittwoch 5. Dezember 2018, 19:07
von __deets__
Ok, ich habe das nicht ganz begriffen, was du da gezeigt hast. C ist ja durch das shiften entstanden. Und eigentlich gar nicht relevant.

Re: Pandas dataframe - Wert aus vorhergehender Zeile kopieren

Verfasst: Mittwoch 5. Dezember 2018, 19:12
von __deets__
So, ist dies das gewuenschte Ergebnis?

Code: Alles auswählen

#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
# For Python3.x

import pandas as pd

df = pd.DataFrame({"A":[1,1,1,2,2,2,1,1,1],"B":[2,5,12,1,1,1,18,2,2]})
df["C"] = df["B"]
work = df.A < df.B
accu = df.B[0]
for i, entry in enumerate(work):
    if entry:
        df.C[i] = accu
    else:
        accu = df.B[i]
print(df)
Ich bin selbst auch noch recht unerfahren in pandas, darum ist das ein bisschen zu fuss.