I have a df like this
| 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 |
I want a output like below
| 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 |
The goal is calculate column C by mulytiplying A and B only when the count value is “yes” but if the column People values are same that is yes for dia and no for also dia , then we have to calculate for the count value “no”
I tried this much so far
df.C= df.groupby("Host", as_index=False).apply(lambda dfx : df.A * df.B if (df['count'] == 'no') else df.A *df.B)
But not able to achieve the goal, any idea how can I achieve the output
Advertisement
Answer
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