如果isnumeric等于False - pandas则替换该值



如果基于SKUisnumeric=Falsefill=NaN的结果如何显示列的实际值

DF

SKU    SKU2
SKU_ABC    False
0    NaN
0    NaN
0    NaN
SKU_ACD    False
0    NaN
0    NaN

预期结果

SKU    SKU2
SKU_ABC    SKU_ABC
0    SKU_ABC
0    SKU_ABC
0    SKU_ABC
SKU_ACD    SKU_ACD
0    SKU_ACD
0    SKU_ACD

脚本(只显示True/False)

df2['SKU2'] = df2['SKU'].str.isnumeric()

我试过这个

df2['SKU2'] = df[~df2['SKU'].str.isnumeric()]

但是我得到了这个错误

TypeError: bad operand type for unary ~: 'float'

我使用这个解决方案是否有办法在Pandas中使用前一行值

with for loop:

df['SKU'] = df['SKU'].fillna('0')
df['SKU2'] = df['SKU'].astype(str).str.isnumeric().fillna(False)
for i in range(len(df)):
if df.loc[i, 'SKU2']:
df.loc[i, 'SKU2'] = df.loc[i-1, 'SKU2']
else:
df.loc[i, 'SKU2'] = df.loc[i, 'SKU']

正如我所理解的,这里的问题是isnumeric,所以让我们尝试用np绕过其他选项
。其中:df['SKU'].str.contains('SKU')

df['SKU2'] = np.where(df['SKU'].astype(str).fillna('0').str.contains('SKU'),df.SKU, None) 
df['SKU2'] = df['SKU2'].ffill()

如果总是'0':df['SKU']=='0'

df['SKU2'] = np.where(df['SKU'].astype(str).fillna('0')=='0', None,df.SKU)
df['SKU2'] = df['SKU2'].ffill()

相关内容

  • 没有找到相关文章

最新更新