Panda veri çerçevesindeki diğer sütunlara göre eksik değer nasıl doldurulur?


19

Üçüncü sütunun eksik değer içerdiği 5 * 3 veri çerçevem ​​olduğunu varsayalım

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

Ben ilk ürün ikinci sütun eksik değer tabanlı kural için değer üretmek istiyoruz

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

Veri çerçevesini nasıl kullanabilirim? Teşekkürler.

Bunun gibi eksik değeri hesaplamak için koşul nasıl eklenir?

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

Bunu yapamazsınız çünkü boyut eşit olmayacak
Mayur Dangar

Cevabınızı genişletebilir misiniz? Neden mümkün değil ve problemi çözmek için ne yapabilirdi?
Damian Melniczuk

hey bile aynı sorum var. ama ele aldığım veriler metinsel olursa? bu durum, "malzemeler" tavuk içeriyorsa "tür" = sebze olmayan "gibi bir
durumdur

Yanıtlar:


17

Veri çerçevenizin üç sütunu olduğunu varsayarsak a, bve c. İstediğin bu:

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

Tam kod:

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
)

Birkaç yıl geç oldu, ancak bu yalnızca sütunlar sayısal olduğunda işe yarar. np.isnansayısal olmayan verileri desteklemez. OP'nin sayısal sütunları ve aritmetik işlemleri olduğu için burada bir sorun değil, aksi takdirde pd.isnulldaha iyi bir alternatif.
Adarsh ​​Chavakula

3

Başka seçenek:

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


3

fillna()Veri çerçevesi yöntemini kullanmaya ne dersiniz?

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


2

Senin dataframe üç sütun olduğunu varsayarsak a, bve c. Sonra gerekli işlemi şu şekilde yapabilirsiniz:

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

1
Veyanp.where(pd.isnull(df.c), df.a * df.b, df.c)
Valentas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.