为了账号安全,请及时绑定邮箱和手机立即绑定

对不同组的 python pandas 进行计算

对不同组的 python pandas 进行计算

慕姐8265434 2023-10-18 21:30:59
我有一个包含不同组的熊猫数据集。对于每个组,我想应用不同的计算。最好的方法是什么?例如,输入数据Group val1 val21      12   31      19   42      23   93      59   743      2    44输出数据Group val1 val2 output1      12   3   3*val1*val21      19   4   3*val1*val22      23   9   5*val1*val23      59   74  10*val1*val23      2    44  10*val1*val2
查看完整描述

3 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

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


查看完整回答
反对 回复 2023-10-18
?
浮云间

TA贡献1829条经验 获得超4个赞

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


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


查看完整回答
反对 回复 2023-10-18
?
函数式编程

TA贡献1807条经验 获得超9个赞

我想你可以使用 apply

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


查看完整回答
反对 回复 2023-10-18
  • 3 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信