Как условно заполнить ячейку на основе значения другой ячейки - PullRequest
0 голосов
/ 21 декабря 2018

Я хочу заполнить значения ячеек NaN столбца «SaleTypeName» словом «valid» для строк, где ProductName имеет значение Salad.

Пока я дошел до этого: sales ['SaleTypeName'] .fillna («Действительный», inplace = True) Но здесь мне не хватает условного аспекта, чтобы при появлении NaN не заполнился весь столбец

У меня есть следующие данные:

import pandas as pd
df = pd.DataFrame ({'Flight Day': ['2018-10-01', '2018-10-01','2018-10-01', '2018-10-01', '2018-10-02','2018-10-02', '2018-10-02', '2018-10-02', '2018-10-03','2018-10-03’, '2018-10-03','2018-10-03’],'Flight Number': [LX1336, LX1337, LX1472, LX1473, LX1336, LX1337, LX1472, LX1473, LX1336, LX1337, LX1472, LX1473],'STD Departure': [10, 15, 8, 11,10, 15, 8, 14,10, 15, 8, 11], ‘Quantity': [2, NaN, 8, 4,3, 2, 3, 1,NaN, 5, 2, 1],’ProductName': [Bircher, Salad, Carac, Salad, Bircher, Carac, Carac, Salad,Bircher, Carac, Carac, Salad], 'SaleTypeName': [NaN, NaN, NaN, NaN ,NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN]})

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Вы можете использовать функцию

df.SaleTypeName.mask(df.ProductName=='Salad', 'Valid', inplace=True)

mask(), чтобы выбрать строки с ProductName как "Salad" в SaleTypeName столбце, значения которого заменяются на "Valid".

inplace аргумент используется для внесения изменений в сам исходный фрейм данных.

См. документы .

0 голосов
/ 21 декабря 2018

Для этой конкретной проблемы вы можете попробовать этот код, а затем изменить его соответствующим образом.

DataFrame:

import pandas as pd
import numpy as np
df = pd.DataFrame (
    {'Flight Day': ['2018-10-01', '2018-10-01','2018-10-01', '2018-10-01', '2018-10-02','2018-10-02', '2018-10-02', '2018-10-02', '2018-10-03','2018-10-03', '2018-10-03','2018-10-03'],
     'Flight Number': ['LX1336', 'LX1337', 'LX1472', 'LX1473', 'LX1336', 'LX1337', 'LX1472', 'LX1473', 'LX1336', 'LX1337', 'LX1472', 'LX1473'],
     'STD Departure': [10, 15, 8, 11,10, 15, 8, 14,10, 15, 8, 11],
     'Quantity': [2, np.NaN, 8, 4,3, 2, 3, 1,np.NaN, 5, 2, 1],
     'ProductName': ['Bircher',' Salad',' Carac',' Salad',' Bircher',' Carac',' Carac',' Salad','Bircher',' Carac',' Carac',' Salad'],
     'SaleTypeName': [np.NaN, np.NaN, np.NaN, np.NaN ,np.NaN, np.NaN, np.NaN, np.NaN, np.NaN, np.NaN, np.NaN, np.NaN]})

Часть кода для реализации:

def replace(name):
    return "valid" if name.strip()=="Salad" else np.NaN

df['SaleTypeName'] = df.loc[:,'ProductName'].apply(lambda x: replace(x))

Вывод:

    ProductName SaleTypeName
0      Bircher          NaN
1        Salad        valid
2        Carac          NaN
3        Salad        valid
4      Bircher          NaN
5        Carac          NaN
6        Carac          NaN
7        Salad        valid
8      Bircher          NaN
9        Carac          NaN
10       Carac          NaN
11       Salad        valid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...