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
KyL
quelle
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
)
Eisklinge
quelle
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'])
enterML
quelle
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

Vishal
quelle
1

Was ist mit der fillna()Methode des Datenrahmens?

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

yosemite_k
quelle