我有一个需要翻译成大熊猫的excel SUMIFS,但似乎是缺少的东西。
Excel
SUMIFS(C:C,$A:$A,$L2,$B:$B,$W$1)=0
熊猫
df[df['year'] == 2017 & df['company_id'].isin(df['company_id_2'])].sum(axis=0, skipna=True)['share_price']
表
A B C ... L ... W
company_id year share_price company_id_2 2017
48299 2017 42.395 48299
48299 2016 30.82 48752
48299 2015 31.79 48865
48865 2017 24.535 49226
48865 2016 23.175 49503
48865 2015 15.7 49554
48752 2017 12.98 49697
48752 2016 15.775 50267
48752 2015 10.09 50714
似乎有第二个条件df['company_id'].isin(df['company_id_2'])
的问题。当我只有df[df['year'] == 2017].sum(axis=0, skipna=True)['share_price']
时,我确实得到了正确的 sum ,但是第二个条件给出的值0.0不正确。
非常感谢您提供有关如何构造第二个条件的帮助。
修改
分别使用每个条件可以得出正确的总和,但不能将它们组合在一起。至少第一行应该给出总和df['share_price'] = 42.395
,因为它满足条件,但是我得到0.0
答案 0 :(得分:0)
一个好主意是创建一个序列映射,然后 将其映射到您的数据框。
在这里您可以使用布尔掩码,然后使用GroupBy
:
s = df[df['year'] == 2017].groupby('company_id')['share_price'].sum()
接下来,使用pd.Series.map
:
df[2017] = df['company_id_2'].map(s).fillna(0)