Pandasデータフレームの他の列に基づいて欠損値を埋める方法は?


19

3番目の列に欠損値が含まれる5 * 3データフレームがあるとします

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

最初の製品の2番目の列という欠損値ベースのルールの値を生成したいと考えています

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

データフレームを使用するにはどうすればよいですか?ありがとう。

このような欠損値を計算する条件を追加するにはどうすればよいですか?

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

サイズが等しくないため、これを行うことができません
マユールダンガー

答えを広げていただけますか?なぜそれが不可能で、問題を解決するために彼は何ができるでしょうか?
ダミアンMelniczuk

ちょっと私も同じ質問があります。しかし、私が扱うデータがテキストの場合はどうなりますか?これは、「「成分」に鶏肉が含まれる場合、「タイプ」=非野菜」のような条件です
-user7389747

回答:


17

データフレームの3列がaであるbとしcます。これはあなたが望むものです:

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

完全なコード:

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
)

数年後ですが、これは列が数値の場合にのみ機能します。np.isnan非数値データはサポートしていません。OPには数値列と算術演算が含まれていたため、ここでは問題になりませんが、それ以外の場合pd.isnullはより良い代替手段です。
アダルシュチャヴァクラ


3

fillna()データフレームのメソッドの使用はどうですか?

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


2

データフレームの3つの列がabおよびであると仮定しますc。その後、次のように必要な操作を実行できます。

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

1
またはnp.where(pd.isnull(df.c), df.a * df.b, df.c)
バレンタス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.