猿问

对不同组的 python 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


慕姐8265434
浏览 137回答 3
3回答

慕妹3242003

您需要创建一个映射/字典d将组链接到其计算值。接下来,map它到列Group并使用 numpy ufunc `reduce of multiply 创建所需的输出import numpy as npd = {1: 3, 2: 5, 3: 10}df['output'] = np.multiply.reduce([df.Group.map(d), df.val1, df.val2])Out[243]:   Group  val1  val2  output0      1    12     3     1081      1    19     4     2282      2    23     9    10353      3    59    74   436604      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'dfOut[1]:    Group  val1  val2        output0      1    12     3   3*val1*val21      1    19     4   3*val1*val22      2    23     9   5*val1*val23      3    59    74  10*val1*val24      3     2    44  10*val1*val2现在,我逐字记录了你的输出,但如果你试图将这些值相乘:),那么你可以这样实现:dct = {1:3, 2:5, 3:10}df['output'] = df['Group'].map(dct) * df['val1'] * df['val2']dfOut[1]:    Group  val1  val2  output0      1    12     3     1081      1    19     4     2282      2    23     9    10353      3    59    74   43660

函数式编程

我想你可以使用 applydf.groupby([“group”, “val1”, “val2”]).apply(lambda x: x)
随时随地看视频慕课网APP

相关分类

Python
我要回答