如果基于SKU
的isnumeric
=False
和fill
=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()