У меня есть фрейм данных df со столбцами a, b, c и константой.
|a |b |c |constant|
id | | | | |
000|0 |0.2 |0.5 |0.7 |
111|0 |-0.3|0.1 |0.9 |
222|0 |NAN |0.6 |0.3 |
333|0 |1 |0.8 |0.5 |
444|0 |0.2 |1 |1.1 |
555|0 |0.8 |NAN |-0.3 |
666|0 |-0.5|-0.6|NAN |
Я хотел бы добавить столбец df ['constant'] ко всем остальным столбцам фрейма данных изаменить текущие столбцы с суммой.то есть df ['a'] будет таким же, как df ['constant'], так как это все 0.Новый фрейм данных должен выглядеть следующим образом:
|a |b |c |constant|
id | | | | |
000|0.7 |0.9 |1.2 |0.7 |
111|0.9 |0.6 |1 |0.9 |
222|0.3 |0.3 |0.9 |0.3 |
333|0.5 |1.5 |1.3 |0.5 |
444|1.1 |1.3 |2.1 |1.1 |
555|-0.3|0.5 |-0.3|-0.3 |
666|0 |-0.5|-0.6|NAN |
ПРИМЕЧАНИЕ. Если NAN добавлен в число с плавающей запятой, то значение float должно быть возвращено
Мои 3 попытки показаны ниже:
попытка 1 использовала функцию, а pd.to_numeric
попытка 2 я использовала 2 функцию, добавление def (x, y), я надеялся, исправит ошибку типа
попытка 3, я устал делать то же самоекак попытка 2, но с лямбда-выражением
df2['constant'] = pd.to_numeric(df2['constant'], errors='coerce')
df2['constant'] = df2['constant'].fillna(0)
dataframe_columns = ['a','b','c']
##attempt number 1
# add merged-constant across df
for c in dataframe_columns:
df2[c] = pd.to_numeric(df2[c], errors='coerce')
df2[c] = df2[c].add(df2['constant'])
##attempt number 2
def adds(x,y):
if isinstance(x, float) and isinstance(y, float)==True:
return x+y
elif isinstance(x, float) and isinstance(y, object):
return x
elif isinstance(x, object) and isinstance(y, float):
return y
else:
return y
# add merged-constant across df2
for c in dataframe_columns:
df2[c] = adds(df2[c], dfc['constant'])
##attempt number 3
def adds(x,y):
if isinstance(x, float) and isinstance(y, float)==True:
return x+y
elif isinstance(x, float) and isinstance(y, object):
return x
elif isinstance(x, object) and isinstance(y, float):
return y
else:
return y
#lambda test add merged-constant across df2
for c in dataframe_columns:
return c
df2[dataframe_columns] = df2.apply(lambda x: adds(x[dataframe_columns], x['constant']), axis = 1)
Я бы хотел, чтобы новым фреймом данных были столбцы a, b и c, к столбцу констант добавлен общий итог, как показано выше.