代码之家  ›  专栏  ›  技术社区  ›  eternity1

循环:通过+=更新结果,如果在同一日期,否则写下一行

  •  -2
  • eternity1  · 技术社区  · 7 年前

    我有一个函数,可以产生这样的输出

    date         cashflow       count   etc
    1/1/2000        40            3       ...
    

    总是一行。这是多次创建的,具有相同或不同的日期。现在我想要一份所有结果的记录

    date      cashflow         count    etc
    1/1/2000     40              3      ...
    

    因此,如果新结果具有相同的日期/索引,则应添加和更新字段,即通过“+=”,然而,如果表中不存在不同的日期,则应添加并提供进一步“更新”的基础,即。

    新建结果

    date      cashflow         count    etc
    1/1/2000     -20              1      ...
    

    那么我的桌子应该显示

    date      cashflow         count    etc
    1/1/2000     20              4      ...
    

    但是,如果新结果出现,并且表中还没有日期

    date      cashflow         count    etc
    2/1/2000     10              20     ...
    

    那么我的桌子看起来像

    date      cashflow         count    etc
    1/1/2000     20              4      ...
    2/1/2000     10              20     ...
    

    edit1:我的问题似乎没有说清楚:一个程序看起来会是什么样子

    1) 如果索引重合:更新值+=

    2) 如果索引不存在,则将表扩展该行

    edit2:如果我的日期被设置为索引,我需要如何更改下面的代码?

    edit3:不知何故,这在循环中不起作用:在一个简单的设置中,这些一行程序中的每一个都是pd。数据帧。然而,在循环中,它们似乎是其他东西,因此我得到了错误:

    AttributeError: 'NoneType' object has no attribute 'groupby'
    

    如果我离开 groupby 仅限使用 sum :

    AttributeError: 'NoneType' object has no attribute 'sum'
    

    我认为循环正在创建某种数据帧列表;不过,附加只起作用。

    1 回复  |  直到 7 年前
        1
  •  1
  •   mcard    7 年前

    您可以使用 DataFrame.append 然后按要用作索引的列分组。

    这么说吧 total_df 要向其中添加新行的表, new_df 是包含这些新行和 date 要用作索引的列。然后您可以使用:

    total_df.append(new_df).groupby(by='date').sum()