Как применить функцию только к некоторым столбцам датафрейма?
import pandas as pd
def pr(income):
if random.random() > 0,8:
return [int(round(income[0]*income[1] , -1 )) , income[0]+income[1]]
else:
return [income[0] , income[1]]
data[['Price1','Price2']] = data[['Price1','Price2']].apply(pr, axis=1)
Во фрейме data много столбцов, подскажите, пожалуйста, как мне изменить процедурой только два из них?
Ответы (3 шт):
Автор решения: Step1709
→ Ссылка
Не совсем понял, применять к столбцам или ячейкам, в вопросе одно, в тексте вопроса другое, но если для столбцов, то можно выполнять .apply() в цикле for:
for i in ['Price1','Price2']:
data[i] = data[i].apply(pr, axis=1)
В список для цикла for закидываем значения всех столбцов, которые нужно изменить.
Автор решения: strawdog
→ Ссылка
используйте список в локаторе:
import pandas as pd
import random
def pr(income):
if random.random() > 0.8:
res = [int(round(income["a"]*income["c"] , -1 )) , income["a"]+income["c"]]
return pd.Series(res, index=income.index)
else:
return income
df = pd.DataFrame({"a":[1,2,3,4], "b":[11,22,33,44], "c":[111,222,333,444]})
print(df)
a b c
0 1 11 111
1 2 22 222
2 3 33 333
3 4 44 444
df.loc[:,["a", "c"]] = df.loc[:,["a", "c"]].apply(pr, axis=1)
print(df)
a b c
0 1 11 111
1 440 22 224
2 3 33 333
3 1780 44 448
Автор решения: Sasha Kurzenev
→ Ссылка
import pandas as pd
def pr(income):
if random.random() > 0,8:
return pd.Series([int(round(income[0]*income[1] , -1 )) , income[0]+income[1]])
else:
return pd.Series([income[0] , income[1]])
data[['Price1','Price2']] = data[['Price1','Price2']].apply(pr, axis=1)
Спасибо всем, разобрался в итоге сам