基于多个条件相乘列

2024-09-30 04:33:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个像这样的df

|  count  | people |  A  |  B  |  C  |
|---------|--------|-----|-----|-----|
|  yes    |  siya  | 4   | 2   |  0  |
|  no     |   aish | 4   | 3   |  0  | 
|  total  |        | 4   |     |  0  | 
|  yes    |   dia  | 6   |  4  |  0  | 
|  no     |   dia  | 6   |   2 |  0  |
|  total  |        | 6   |     |  0  |

我想要一个如下的输出

|  count  | people |  A  |  B  |  C  |
|---------|--------|-----|-----|-----|
|  yes    |  siya  | 4   | 2   |  8  |
|  no     |   aish | 4   | 3   |  0  | 
|  total  |        | 4   |     |  0  | 
|  yes    |   dia  | 6   |  4  |  0  | 
|  no     |   dia  | 6   |  2  |  2  |
|  total  |        | 6   |     |  0  |

目标是仅当计数值为“是”时,通过乘以A和B来计算列C,但如果列人员值与dia的值相同,dia的值为“是”,dia的值为“否”,则我们必须计算计数值“否”

到目前为止我试了这么多

df.C= df.groupby("Host", as_index=False).apply(lambda dfx : df.A * 
                           df.B if (df['count'] == 'no') else df.A *df.B)

但无法实现目标,任何想法如何才能实现输出


Tags: nohost目标df人员ascountpeople
1条回答
网友
1楼 · 发布于 2024-09-30 04:33:48
import numpy as np

#Set Condtions

c1=df.groupby('people')['count'].transform('nunique').eq(1)&df['count'].eq('yes')
c2=df.groupby('people')['count'].transform('nunique').gt(1)&df['count'].eq('no')
#Put conditions in list
c=[c1,c2]

#Mke choices corresponding to condition list
choice=[df['A']*df['B'],len(df[df['count'].eq('no')])]

#Apply np select
df['C']= np.select(c,choice,0)

print(df)




    count people  A    B    C
0    yes   siya  4  2.0  8.0
1     no   aish  4  3.0  0.0
2  total    NaN  4  0.0  0.0
3    yes    dia  6  4.0  0.0
4     no    dia  6  2.0  2.0
5  total    NaN  6  NaN  0.0

相关问题 更多 >

    热门问题