Python 为不同的组执行计算

Python 为不同的组执行计算,python,pandas,data-manipulation,Python,Pandas,Data Manipulation,我有一个不同组的熊猫数据集。对于每个组,我希望应用不同的计算。最好的方法是什么 比如说, 输入数据 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

我有一个不同组的熊猫数据集。对于每个组,我希望应用不同的计算。最好的方法是什么

比如说,

输入数据

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

我想你可以申请

df.groupby([“group”, “val1”, “val2”]).apply(lambda x: x)

您需要创建映射/字典
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

如果该字符串是您正在寻找的文本输出,那么您可以为每个组创建一个字典并映射值。然后只需将字符串添加到末尾:

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