熊猫像SUMIFS一样具有两个条件,

时间:2018-10-29 16:39:13

标签: python pandas excel-formula

我有一个需要翻译成大熊猫的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

1 个答案:

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