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

关于pandas中条件计算的问题

关于pandas中条件计算的问题

繁华开满天机 2022-07-05 19:35:58
我有这个公式,我想把它变成pandas计算,公式很简单: NEW = A(where v=1) + A(where v=3) + A(where v=5)我有一个这样的数据框:Type subType value   A           NEW X    a       1      3         =3+9+9=21 X    a       3      9   X    a       5      9 X    b       1      4         =4+5+0=9 X    b       3      5  X    b       5      0 Y    a       1      1         =1+2+3=6 Y    a       3      2   Y    a       5      3 Y    b       1      4         =4+5+2=11 Y    b       3      5  Y    b       5      2两个问题:我知道我可以用指定的单元格写下计算,但我希望代码看起来更好,还有其他方法来获取值吗?因为 X 和 Y 只有两个结果,如何将它们添加到原始数据框中以进行进一步计算?(我的想法是不要将它们添加到数据框中,而只是在将来计算需要时使用该值)对编码很陌生,任何答案都将不胜感激!
查看完整描述

1 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

尝试这个:


>>> import pandas as pd

>>> df = pd.DataFrame({'Type':['X','X','X','Y','Y','Y'], 'value':[1,3,5,1,3,5], 'A':[3,9,4,0,2,2]})


>>> df

  Type  value  A

0    X      1  3

1    X      3  9

2    X      5  4

3    Y      1  0

4    Y      3  2

5    Y      5  2


>>> df.groupby('Type')['A'].sum()

Type

X    16

Y     4


>>> ur_dict = df.groupby('Type')['A'].sum().to_dict()

>>> df['NEW'] = df['Type'].map(ur_dict)

>>> df

  Type  value  A  NEW

0    X      1  3   16

1    X      3  9   16

2    X      5  4   16

3    Y      1  0    4

4    Y      3  2    4

5    Y      5  2    4

希望这可以帮助。


编辑以回答其他询问:

您正在将元组键映射到一个系列,这会给您一个错误。在进行映射之前,您应该将需要将字典映射到的列转换为索引。


见下文:


>>> import pandas as pd

>>> df = pd.DataFrame({'Type':['X','X','X','X','X','X','Y','Y','Y','Y','Y','Y'], 'subType':['a','a','a','b','b','b','a','a','a','b','b','b'],'value':[1,3,5,1,3,5,1,3,5,1,3,5],'A':[3,9,9,4,5,0,1,2,3,4,5,2]})

>>> df

   Type subType  value  A

0     X       a      1  3

1     X       a      3  9

2     X       a      5  9

3     X       b      1  4

4     X       b      3  5

5     X       b      5  0

6     Y       a      1  1

7     Y       a      3  2

8     Y       a      5  3

9     Y       b      1  4

10    Y       b      3  5

11    Y       b      5  2


>>> df.groupby(['Type', 'subType'])['A'].sum()

Type  subType

X     a          21

      b           9

Y     a           6

      b          11

Name: A, dtype: int64

>>> ur_dict = df.groupby(['Type', 'subType'])['A'].sum().to_dict()

>>> ur_dict

{('X', 'a'): 21, ('X', 'b'): 9, ('Y', 'a'): 6, ('Y', 'b'): 11}


>>> df['NEW'] = df.set_index(['Type', 'subType']).index.map(ur_dict)

>>> df

   Type subType  value  A  NEW

0     X       a      1  3   21

1     X       a      3  9   21

2     X       a      5  9   21

3     X       b      1  4    9

4     X       b      3  5    9

5     X       b      5  0    9

6     Y       a      1  1    6

7     Y       a      3  2    6

8     Y       a      5  3    6

9     Y       b      1  4   11

10    Y       b      3  5   11

11    Y       b      5  2   11



查看完整回答
反对 回复 2022-07-05
  • 1 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

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