Арифметические операции над сериями Pandas для создания новых серий - PullRequest
1 голос
/ 11 октября 2019

Скажите, что у меня есть следующий кадр данных Pandas

import numpy as np
import pandas as pd

такой, что у меня есть следующий кадр данных

+----+-----------+----------+----------+----------+
|    |         a |        b |        c |        d |
|----+-----------+----------+----------+----------|
|  0 | 0.462955  | 0.605148 | 0.481413 | 0.848894 |
|  1 | 0.341476  | 0.611664 | 0.419806 | 0.6367   |
|  2 | 0.0773736 | 0.795014 | 0.635595 | 0.154184 |
+----+-----------+----------+----------+----------+

Скажите, что я хочу изменить столбец d так, чтобы d = a * b / c. Я могу использовать groupby и apply, чтобы получить следующее

df.groupby(['a','b','c']).apply(lambda x: x['a'] * x['b'] / x['c'])

a         b         c          
0.077374  0.795014  0.635595  2    0.096780
0.341476  0.611664  0.419806  1    0.497535
0.462955  0.605148  0.481413  0    0.581946
dtype: float64

, что в некоторой степени то, что я ищу, поскольку оно содержит желаемые значения, но все еще далеко от желаемого результата.

Вы можете мне помочь?

РЕДАКТИРОВАТЬ: метод должен быть работоспособным также в случае, когда у меня очень большая фильтрация.

1 Ответ

4 голосов
/ 11 октября 2019

Вам на самом деле не нужна groupby или какая-либо функция (если я что-то не так понимаю), вы можете просто определить:

df['d'] = df['a'] * df['b'] / df['c']

Пример:

data = {'a':[0.462955,0.341476,0.0773736],'b':[0.605148,0.611664,0.795014],'c':[0.481413,0.419806,0.635595]}
df = pd.DataFrame(data)
df['d'] = df['a'] * df['b'] / df['c']
print(df)

Вывод:

          a         b         c         d
0  0.462955  0.605148  0.481413  0.581946
1  0.341476  0.611664  0.419806  0.497536
2  0.077374  0.795014  0.635595  0.096780
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...