У меня есть фрейм данных, в котором столбцы содержат элементы смешанного типа, и мне нужно провести некоторые вычисления среди них. Предположим, что этот фрейм данных:
A=[20, np.nan, 10, 'give', np.nan, np.nan]
B=[10, np.nan, np.nan, np.nan, 10, 'given']
frame=pd.DataFrame(zip(A,B))
frame.columns=['A', 'B']
Я хочу заполнить разницу B от A. Если я сделаю frame['diff']=frame['A']-frame['B']
, это не даст нужного мне результата. Вместо этого я хотел бы получить результат в столбце «требуемая разница».
По сути, если A или B имеет число, то B или A должны быть 0. Если строка находится в A, а B - NaN, тогда он должен написать «положительный» и, наоборот, он должен написать «отрицательный». См. Ниже:
frame
A B diff desired diff
0 20 10 10 10
1 NaN NaN NaN NaN
2 10 NaN NaN 10
3 give NaN NaN positive
4 NaN 10 NaN -10
5 NaN given NaN negative
Просто для записи, я попытался реализовать np.where
и np.select
и некоторые условия, такие как np.logical_and(frame['A'].apply(lambda x: isinstance(x, float)), frame['B'].isna())
, для достижения желаемого результата, но безуспешно.
Заранее спасибо за ваши предложения!