【问题标题】:Pandas excel like SUMIFS with two conditions熊猫在两个条件下像 SUMIFS 一样出色
【发布时间】:2019-04-02 15:43:51
【问题描述】:

我有一个需要翻译成熊猫的 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,这是不正确的。

非常感谢任何有关如何构建第二个条件的帮助。

编辑

单独使用每个条件会产生正确的总和,但将它们组合起来却不会。至少第一行应该给出 sum df['share_price'] = 42.395,因为它满足条件,但我得到 0.0

【问题讨论】:

  • 你想用df['company_id'].isin(df['company_id_2'])做什么?
  • 试图对df['share_price]求和,其中company_id_2出现在conpany_id中。所以在上面的例子中company_id_2 = 48299company_id列中出现了3次
  • 我不太明白你的意思。 company_id_2company_id 中出现多少次有关系吗?根据上表,预期的输出是什么?

标签: python pandas excel-formula


【解决方案1】:

一个好主意是创建一个系列映射,然后将它映射到您的数据框。

这里你可以使用布尔掩码,然后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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 2017-11-30
    • 2021-07-21
    • 2020-12-18
    • 2021-08-14
    相关资源
    最近更新 更多