Wie fülle ich fehlende Werte basierend auf anderen Spalten in Pandas Datenrahmen auf?


15

Angenommen, ich habe einen 5 * 3-Datenrahmen, in dem die dritte Spalte einen fehlenden Wert enthält

1 2 3
4 5 NaN
7 8 9
3 2 NaN
5 6 NaN

Ich hoffe, einen Wert für die fehlende wertbasierte Regel in der zweiten Spalte des ersten Produkts zu generieren

1 2 3
4 5 20 <--4*5
7 8 9
3 2 6 <-- 3*2
5 6 30 <-- 5*6

Wie kann ich den Datenrahmen verwenden? Vielen Dank.

Wie füge ich eine Bedingung hinzu, um einen fehlenden Wert wie diesen zu berechnen?

if 1st % 2 == 0 then 3rd = 1st * 2nd else 3rd = 1st + 2nd

1 2 3
4 5 20 <-- 4*5 because 4%2==0
7 8 9
3 2 5 <-- 3+2 because 3%2==1
5 6 11 <-- 5+6 because 5%2==1

Sie können dies nicht tun, weil die Größe nicht gleich sein wird
Mayur Dangar

Können Sie Ihre Antwort erweitern? Warum ist es nicht möglich und was könnte er möglicherweise tun, um das Problem zu lösen?
Damian Melniczuk

Hey, auch ich habe die gleiche Frage. Aber was ist, wenn die Daten, mit denen ich zu tun habe, in Textform vorliegen? Das ist die Bedingung ist wie "Wenn" Zutaten "Huhn enthält, dann" Typ "= Nicht-Gemüse"
user7389747

Antworten:


16

Unter der Annahme , drei Spalten Ihres Datenrahmen ist a, bund c. Das ist, was du willst:

df['c'] = df.apply(
    lambda row: row['a']*row['b'] if np.isnan(row['c']) else row['c'],
    axis=1
)

Vollständiger Code:

df = pd.DataFrame(
    np.array([[1, 2, 3], [4, 5, np.nan], [7, 8, 9], [3, 2, np.nan], [5, 6, np.nan]]), 
    columns=['a', 'b', 'c']
)
df['c'] = df.apply(
    lambda row: row['a']*row['b'] if np.isnan(row['c']) else row['c'],
    axis=1
)

2

Unter der Annahme , dass die drei Spalten in Ihrem Datenrahmen sind a, bund c. Dann können Sie die gewünschte Operation wie folgt ausführen:

values = df['a'] * df['b']
df['c'] = values.where(df['c'] == np.nan, others=df['c'])

1
Odernp.where(pd.isnull(df.c), df.a * df.b, df.c)
Valentas

2

Andere Option:

df.loc[(pd.isnull(df.C)), 'C'] = df.A * df.B


1

Was ist mit der fillna()Methode des Datenrahmens?

df['C'].fillna(df.A * df.B)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.