我在以下代码中遇到错误:
np.where(df['A'].groupby([df['B'], df['B_1']]).sum() > 0, 1, 0)
错误: ValueError: operands could not be broadcast together with shapes (2013,) (1353,) ()
是否可以在groupby
内做熊猫np.where
?
最好的方法是什么?
我想sum
列df[A]
,其中列df[B]
和df[B_1]
excel中的公式:
=IF($J3=$C3,IF(SUMIFS($S:$S,$A:$A,$A3,$C:$C,$C3)>0,1,0),"")
公式:
df['C'] = np.where(df['B_1'] == df['B'], np.where(df['competing'].groupby([df['company_id'], df['company_id.1']]).sum() > 0, 1, 0), None)
答案 0 :(得分:2)
Excel的SUMIFS
返回内联聚合是基于返回值与输入值的长度相同的条件(即,计算前后)。
要获得相似的结果,请考虑熊猫的groupby().transform()
,它也返回内联聚合,其中返回的列与输入列的长度相同。单独运行groupby()
会将记录折叠为返回不同长度值的那些分组。
df['C'] = np.where(df['B_1'] == df['B'],
np.where(df.groupby(['company_id', 'company_id.1'])['competing'].transform('sum') > 0, 1, 0),
np.nan)