РЕДАКТИРОВАТЬ:
Поскольку значения в столбце A
являются объектами (очевидно, строки):
df['A'] = df['A'].astype(float)
Если не работает, потому что плохие значения (например, некоторые строки) - плохие значенияизменено на NaN
s:
df['A'] = pd.to_numeric(df['A'], errors='coerce')
Используйте Series.mask
для установки нового столбца по условию с Series.between
:
#multiple columns
df['A*B'] = df["A"]*df["B"]
#subtract to Series
diff = df['A*B'] - df['C']
#create mask
mask = diff.between(-0.1, 0.1)
df["difference"] = diff.mask(mask, 0)
print (df)
A B C A*B difference
0 0.028571 4 0.114286 0.114286 0.0
1 0.107143 4 0.428571 0.428571 0.0
2 0.007143 6 0.042857 0.042857 0.0
3 1.200000 4 5.500000 4.800000 -0.7
4 1.500000 3 3.000000 4.500000 1.5
print (f'Count: {(~mask).sum()}')
Count: 2
Если важен порядок, добавьте DataFrame.insert
с DataFrame.pop
для столбцов извлечения:
df.insert(0, 'A*B', df.pop("A")*df.pop("B"))
diff = df['A*B'] - df['C']
mask = diff.between(-0.1, 0.1)
df["difference"] = diff.mask(mask, 0)
print (df)
A*B C difference
0 0.114286 0.114286 0.0
1 0.428571 0.428571 0.0
2 0.042857 0.042857 0.0
3 4.800000 5.500000 -0.7
4 4.500000 3.000000 1.5
print (f'Count: {(~mask).sum()}')
Count: 2