选择性分组依据,np.where/Python查询

选择性分组依据,np.where/Python查询,python,pandas,numpy,Python,Pandas,Numpy,你有吗 你想要什么 A B C 1 1 10 1 1 10 1 2 5 1 3 6 1 4 7 仅当列B为1或2时,才尝试按列A、B分组。如果B是1或2,则输出D列作为C列的和。否则保持设置D列=C列 示例代码给出错误: A B C D 1 1 10 20 1 1 10 20 1 2 5 5 1 3 6 6 1 4 7 7 这里发生了一个问题:df_want['A','B'].map。。如果我只放df_want.A.map,那

你有吗

你想要什么

A  B C
1  1  10
1  1  10
1  2  5
1  3  6
1  4  7
仅当列B为1或2时,才尝试按列A、B分组。如果B是1或2,则输出D列作为C列的和。否则保持设置D列=C列

示例代码给出错误:

A  B C    D
1  1  10  20
1  1  10  20
1  2  5   5
1  3  6   6
1  4  7   7

这里发生了一个问题:df_want['A','B'].map。。如果我只放df_want.A.map,那么代码会运行,但输出是错误的。仅当列B为1或2时,我才需要它映射总和

总和
更改为
变换('sum')


sum
更改为
transform('sum')

你可以使用loc

np.where(df_want['B'].isin([1,2]), 
             df_want.groupby(['A','B'])['C'].transform('sum'), df_want['C'])
你可以使用loc

np.where(df_want['B'].isin([1,2]), 
             df_want.groupby(['A','B'])['C'].transform('sum'), df_want['C'])

你能看看我的问题吗[
df['D'] = df['C'].copy()
df.loc[df['B'].isin([1,2]), 'D'] = df.loc[df['B'].isin([1,2])].groupby(['A', 'B']).C.transform('sum')


    A   B   C   D
0   1   1   10  20
1   1   1   10  20
2   1   2   5   5
3   1   3   6   6
4   1   4   7   7