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

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

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

繁花不似锦 2021-07-04 11:20:51
df_haveA  B C1  1  101  1  101  2  51  3  61  4  7df_wantA  B C    D1  1  10  201  1  10  201  2  5   51  3  6   61  4  7   7仅当 B 列是 1 或 2 时才尝试按 A、B 列分组。如果 B 是 1 或 2,则将 D 列输出为 C 列的总和。否则保持设置列 D = 列 C。示例代码给出错误:df_want['D']=np.where((df_want['B'].isin([1,2]),              df_want['A','B'].map(df_want.groupby(['A','B'])['C'].sum()),              df_want['C'])问题发生在这里: df_want['A','B'].map .. 如果我只放 df_want.A.map 则代码运行但输出错误。如果 col B 是 1 或 2,我只需要它来映射总和
查看完整描述

2 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

更改sumtransform('sum')

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


查看完整回答
反对 回复 2021-07-06
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

df_have


A  B C

1  1  10

1  1  10

1  2  5

1  3  6

1  4  7

df_want


A  B C    D

1  1  10  20

1  1  10  20

1  2  5   5

1  3  6   6

1  4  7   7

仅当 B 列是 1 或 2 时才尝试按 A、B 列分组。如果 B 是 1 或 2,则将 D 列输出为 C 列的总和。否则保持设置列 D = 列 C。


示例代码给出错误:


df_want['D']=np.where((df_want['B'].isin([1,2]), 

             df_want['A','B'].map(df_want.groupby(['A','B'])['C'].sum()), 

             df_want['C'])

问题发生在这里: df_want['A','B'].map .. 如果我只放 df_want.A.map 则代码运行但输出错误。如果 col B 是 1 或 2,我只需要它来映射总和


查看完整回答
反对 回复 2021-07-06
  • 2 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

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