如何根据另一个单元格的值有条件地填充一个单元格

时间:2018-12-21 09:06:08

标签: python python-3.x dataframe conditional

对于产品名称具有沙拉的行,我想用单词“有效”填充“ SaleTypeName”列的NaN单元格值。

到目前为止,我走了这么远: sales ['SaleTypeName']。fillna(“ Valid”,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 :(得分:0)

对于此特定问题,您可以试用此代码,以后可以进行相应的修改。

DataFrame:

myArray

要实现的代码部分:

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))

答案 1 :(得分:0)

您可以使用

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

mask()函数用于在ProductName列中选择"Salad"SaleTypeName的行,并将其值替换为"Valid"

inplace参数用于在原始数据帧本身中进行更改。

请参见docs