Як заповнити пропущене значення на основі інших стовпців у фреймі даних Pandas?


19

Припустимо, у мене є кадр даних 5 * 3, в якому третій стовпець містить відсутнє значення

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

Я сподіваюся створити значення для відсутнього значення на основі правила, що перший колонка продукту

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

Ви не можете цього зробити, тому що розмір не буде рівним
Mayur Dangar

Чи можете ви розширити свою відповідь? Чому це неможливо і що він може зробити для вирішення проблеми?
Даміян Мельничук

ей, навіть у мене те саме питання. але що робити, якщо дані, якими я маю справу, є текстовими? це умова на зразок "якщо" інгредієнти "містять курку, то" тип "= не-
вег

Відповіді:


17

Припустимо, що три стовпці вашого фрейму даних є 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не підтримує нечислові дані. Тут справа не в тому, що в ОП були числові стовпці та арифметичні операції, але в іншому випадку pd.isnullце краща альтернатива.
Адарш Чавакула


3

Що з використанням fillna()методу фрейму даних?

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


2

Якщо припустити, що три стовпці у вашому фреймі даних є a, bі 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)
Валентас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.