在np.where

时间:2018-12-03 15:50:40

标签: python pandas numpy dataframe

我在以下代码中遇到错误:

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

最好的方法是什么?

我想sumdf[A],其中列df[B]df[B_1]

excel中的公式:

=IF($J3=$C3,IF(SUMIFS($S:$S,$A:$A,$A3,$C:$C,$C3)>0,1,0),"")

python中的

公式:

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)

1 个答案:

答案 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)