В Pandas как я могу применить функцию к строке кадра данных, где каждый элемент в строке должен быть передан функции в качестве аргумента? - PullRequest
0 голосов
/ 01 мая 2020

Другими словами, скажем, у меня есть фрейм данных с некоторыми столбцами и числовые данные в таблице. Например, у меня рост, вес, возраст. Простой фрейм данных, заполненный числами.

Я хочу создать новую серию (и добавить ее в фрейм данных), которая является результатом некоторых вычислений с использованием каждого элемента из каждой строки. Итак, у меня есть функция f (рост, вес, возраст), и я хочу, чтобы числовой результат этой функции сохранялся как ее новый новый столбец.

Итак, в данной строке у меня будет рост, вес, age и результат f ().

Извините, я исследовал множество pandas примеров применения и не могу найти ничего, что вполне соответствует тому, что я имею в виду, хотя это выглядит как это то, что должно быть выполнимо!

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Давайте возьмем пример, в котором у нас есть фрейм данных, в котором мы имеем вес и рост.

Мы можем использовать функцию apply, чтобы применить функцию к каждой строке со всеми столбцами или выбранными столбцами. следующим образом:

df = pd.DataFrame({"height": [180, 178, 190, 166], 'weight': [78, 72, 89, 75] })

print(df)

   height  weight
0     180      78
1     178      72
2     190      89
3     166      75

def bmi(x):
    return x.weight/((x.height/100)**2)

df['bmi'] = df.apply(lambda x: bmi(x), axis=1)

print(df)

   height  weight        bmi
0     180      78  24.074074
1     178      72  22.724403
2     190      89  24.653740
3     166      75  27.217303
0 голосов
/ 01 мая 2020

Теперь, если я правильно понял, ваша функция рассчитала значение, используя ваши данные (рост, вес и возраст) для каждой строки, и это будет в новом столбце в кадре данных, я прав?

Теперь вы хотите сделать этот ряд за строкой, что я не уверен, почему? Вы хотите перебрать свой кадр данных? У меня недостаточно информации о вашей функции, чтобы сказать, действительно ли это необходимо или нет, но в целом я бы избегал такого подхода, поскольку он намного медленнее, чем запуск процесса викторизации, как показано ниже:

df['result'] = #whatever your function is doing using the df['height', 'weight', 'age']

пример, давайте предположим, что ваша функция умножает рост на вес, а затем делит на возраст, поэтому вы можете сделать следующее:

df['result'] = (df['height'] * df['weight']) / df['age']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...