对于产品名称具有沙拉的行,我想用单词“有效”填充“ 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]})
答案 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。