#python #pandas #data-manipulation
#python #pandas #манипулирование данными
Вопрос:
У меня есть набор данных pandas с разными группами. Для каждой группы я хочу применить разные вычисления. Каков наилучший способ сделать это?
Например,
Входные данные
Group val1 val2
1 12 3
1 19 4
2 23 9
3 59 74
3 2 44
Выходные данные
Group val1 val2 output
1 12 3 3*val1*val2
1 19 4 3*val1*val2
2 23 9 5*val1*val2
3 59 74 10*val1*val2
3 2 44 10*val1*val2
Ответ №1:
Вам необходимо создать сопоставление / словарь d
, чтобы связать группы с их расчетными значениями. Затем map
перейдите к столбцам Group
и используйте numpy ufunc `reduce of multiply для создания желаемого результата
import numpy as np
d = {1: 3, 2: 5, 3: 10}
df['output'] = np.multiply.reduce([df.Group.map(d), df.val1, df.val2])
Out[243]:
Group val1 val2 output
0 1 12 3 108
1 1 19 4 228
2 2 23 9 1035
3 3 59 74 43660
4 3 2 44 880
Если вы не хотите использовать numpy, просто выполните умножение каждого столбца
df['output'] = df.Group.map(d) * df.val1 * df.val2
Ответ №2:
Если эта строка является буквальным выводом, который вы ищете, вы можете создать словарь для каждой группы и сопоставить значения. Затем просто добавьте строку в конец:
dct = {1:3, 2:5, 3:10}
df['output'] = df['Group'].map(dct).astype(str) '*val1*val2'
df
Out[1]:
Group val1 val2 output
0 1 12 3 3*val1*val2
1 1 19 4 3*val1*val2
2 2 23 9 5*val1*val2
3 3 59 74 10*val1*val2
4 3 2 44 10*val1*val2
Теперь я взял ваш вывод дословно, но если вы пытаетесь умножить эти значения :), то вы можете добиться этого следующим образом:
dct = {1:3, 2:5, 3:10}
df['output'] = df['Group'].map(dct) * df['val1'] * df['val2']
df
Out[1]:
Group val1 val2 output
0 1 12 3 108
1 1 19 4 228
2 2 23 9 1035
3 3 59 74 43660
Ответ №3:
Я думаю, вы могли бы использовать apply
df.groupby([“group”, “val1”, “val2”]).apply(lambda x: x)