关于熊猫条件计算的问题



我有这个公式,我想把它变成熊猫计算, 公式非常简单: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

两个问题:

  1. 我知道我可以用指定的单元格写下计算,但我希望代码看起来更好,还有其他方法可以获取值吗?

  2. 由于 X 和 Y 只有两个结果,如何将它们添加到原始数据帧中以供进一步计算?(我的想法是不要将它们添加到数据帧中,而只是在将来计算需要时使用该值( 编码新手,任何答案将不胜感激!

试试这个:

>>> 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

最新更新