【问题标题】:Trying to code a Python equivalent of SUMIFs feature in Excel尝试在 Excel 中编写与 SUMIF 功能等效的 Python 代码
【发布时间】:2020-02-27 22:34:48
【问题描述】:

我正在尝试使用 Python 从头开始​​重写 .xlsx 文件。 Excel 表有 99 行和 11 列。我已经生成了 99 行 x 8 列,我目前正在生成 99 行 x 第 9 列。 第 9 列是根据 Excel 中的 SUM-IFS 公式计算得出的。它考虑了第 2、4 和 7 列。

上校。 2 具有数字 int 值。 Col. 4 具有三个字母的机场代码值,例如纽约市的 NYC Col. 7 还具有三个字母的机场代码值,例如德里的 DEL。

第 9 列单元格的求和公式 SUMIFS(B:B, D:D, D2, G:G, G2)

因此,它将第 2 列中对应城市的数值相加。 4和col。 7.如果col中的一对城市只出现一次。 4和col。 7 然后没有什么可以求和,col.9 中的单元格 = col 中单元格的 int 值。 2 但是,如果在 col 中多次出现这对城市。 4和col。 7 然后是 col 中的相应值。 2 被求和,这成为 col 中单元格的值。 9

例子:

在此示例中,上校。 2 是销售,col.4 是起源城市,col。 7 是目的地城市和上校。 9 是利用=SUMIFS(B:B,C:C,C2,D:D,D2) 的Result

我正在尝试在我拥有的大型数据集上使用 python 计算第 9 列。现在,我已经能够创建一个字典列表,其中我将键设为 origin_city-destination_city,将值设为 col 的整数值。 2.字典列表和excel文件一样有99行,因此excel文件的每一行都表示为一个字典。在打印字典时,它是这样的:

{'YTO-YVR': 570}
{'YVR-YTO': 542}
{'YTO-YYC': 420}
{'YYT-YTO': 32}
{'YWG-YYC': 115}

我一直在考虑是否可以遍历字典列表并创建它的 SUMIFS 版本 --- 导致列表中有 99 个字典,每个字典都有 sumif 值。在此之后,我必须将所有这些值写入 excel 文件中的列..

我希望这里有人可以提供帮助!提前非常感谢你:)

【问题讨论】:

    标签: python excel pandas dictionary data-analysis


    【解决方案1】:

    您可以将 pandas 的 groupbytransform 一起使用:

    import pandas as pd
    df = pd.DataFrame({'Sales': [100,110,200,300,150,200,100],
                       'Origin': ['YYZ','YEA','CDG','YYZ','YEA','YVR','YEA'],
                       'Dest': ['DEL','NYC','YUL','DEL','YTO','HKG','NYC']})
    
    df['Result'] = df.groupby(['Origin','Dest']).Sales.transform('sum')
    

    结果:

       Sales Origin Dest  Result
    0    100    YYZ  DEL     400
    1    110    YEA  NYC     210
    2    200    CDG  YUL     200
    3    300    YYZ  DEL     400
    4    150    YEA  YTO     150
    5    200    YVR  HKG     200
    6    100    YEA  NYC     210
    

    【讨论】:

    • 非常感谢这对我有用!但是,我了解 df.groupby(['Origin','Dest']) 但不了解 '.Sales.transform('sum')' 。如果您能解释一下,将不胜感激:)
    • .Sales.['Sales'] 的简写,意味着比以下操作(转换)应用于此列(系列)。 transform 有点难以理解 - 基本上它就像一个聚合函数(例如 .sum()),但结果并不应用于组,而是应用于各个行,即组的所有行都获得相同的分配结果.参见例如here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    相关资源
    最近更新 更多