Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算总和-使用groupby对行进行分组后_Python_Python 3.x_Pandas_Pandas Groupby - Fatal编程技术网

Python 计算总和-使用groupby对行进行分组后

Python 计算总和-使用groupby对行进行分组后,python,python-3.x,pandas,pandas-groupby,Python,Python 3.x,Pandas,Pandas Groupby,我想在保留(显示)每个子组中的所有记录的同时,按数据帧中的特定列分组,并计算由此创建的子组的总和 我正在尝试创建自己的信用卡费用跟踪计划。(我知道已经有几个可用的,但想法是学习Python。) 我有“商户”、“日期”、“类型”和“金额”等常用字段 我想做以下工作之一: 按商户对项目进行分组,然后在每个此类分组中,将金额拆分为(两个新栏)“借方”和“贷方”。我还希望能够将这些列下的金额相加。对每个商户组重复此操作 如果无法根据交易的“类型”(即“借方”和“贷方”)进行拆分,则我希望能够分别对借方和

我想在保留(显示)每个子组中的所有记录的同时,按数据帧中的特定列分组,并计算由此创建的子组的总和

我正在尝试创建自己的信用卡费用跟踪计划。(我知道已经有几个可用的,但想法是学习Python。)

我有“商户”、“日期”、“类型”和“金额”等常用字段

我想做以下工作之一:

  • 按商户对项目进行分组,然后在每个此类分组中,将金额拆分为(两个新栏)“借方”和“贷方”。我还希望能够将这些列下的金额相加。对每个商户组重复此操作

  • 如果无法根据交易的“类型”(即“借方”和“贷方”)进行拆分,则我希望能够分别对借方和贷方进行合计,并保留行项目(即在显示时)进行合计()在“金额”栏中,每个商户只给出一个数字,我确认这是一个不正确的金额

  • 我的数据框如下所示:

       Posted_Date  Amount    Type       Merchant  
    0   04/20/2019  -89.70   Debit            UNI  
    1   04/20/2019   -6.29   Debit          BOOKM  
    2   04/20/2019  -36.42   Debit       BROOKLYN  
    3   04/18/2019  -20.95   Debit  MTA*METROCARD  
    4   04/15/2019  -29.90   Debit           ZARA  
    5   04/15/2019   -7.70   Debit         STILES 
    
    在读入数据框并将交易标记为贷方或借方后,我拥有的代码是:

    merch_new = df_new.groupby(['Merchant','Type'])
    merch_new.groups
    
    for key, values in merch_new.groups.items():
        df_new['Amount'].sum()
        print(df_new.loc[values], "\n\n")
    
    我可以按以下方式进行拆分:

        Posted_Date  Amount   Type   Merchant  
    217  05/23/2019  -41.70  Debit        AT  
    305  04/27/2019  -12.40  Debit        AT  
    
    
    
     Posted_Date  Amount    Type Merchant  
    127   07/08/2019    69.25   Credit       AT  
    162   06/21/2019   139.19   Credit       AT
    
    理想情况下,我希望如下所示:

    它看起来很简单,但我无法以这种方式格式化它

    编辑: 重命名轴()时出现错误:
    rename\u axis()得到一个意外的关键字参数“index”
    如果我删除index参数,我会得到与“columns”相同的错误

    我搜索了很多用法(如Benoit所示),但找不到任何用法。它们都使用字符串或列表。我尝试使用:
    rename\u轴(无,无)
    我得到了一个错误:
    ValueError:没有为对象类型命名为None的轴

    我不知道这是否是因为我使用的python版本(3.6.6)。我试过Spyder和Jupyter。但我也犯了同样的错误

    我用过:
    rename\u axis(无,axis=1)
    我似乎得到了想要的结果(某种程度上) 但我无法理解这是如何解释的,因为没有为“无”指定它读入哪个参数的限定符。谁能解释一下吗

    感谢您的帮助!
    非常感谢

    我认为你试图实现这样的目标:

       Posted_Date  Amount    Type       Merchant  
    0   04/20/2019  -89.70   Debit            UNI  
    1   04/20/2019   -6.29   Debit          BOOKM  
    2   04/20/2019  -36.42   Debit       BROOKLYN  
    3   04/18/2019  -20.95   Debit  MTA*METROCARD  
    4   04/15/2019  -29.90   Debit           ZARA  
    5   04/15/2019   -7.70   Debit         STILES 
    
    [1]中的
    
    ##创建示例
    作为pd进口熊猫
    cols=[“过账日期”、“金额”、“类型”、“商户”]
    数据=['04/20/2019',-89.70,'Debit','UNI'],
    [2019年4月20日,-6.29,'Credit','BOOKM'],
    ['2019年4月20日',-36.42,'借方','布鲁克林',
    [2019年4月20日,-6.29,'Credit','BOOKM'],
    [2019年4月20日,-54.52,'Credit','BROOKLYN'],
    [2019年4月18日,-20.95,'Credit','BROOKLYN']
    df=pd.DataFrame(列=cols,数据=data)
    ##聚合函数为“sum”的透视表
    df_final=pd.pivot_表(df,values='Amount',index=['Posted_Date','Merchant'],
    columns=['Type'],aggfunc='sum')。fillna(0)。重置_index()。重命名_轴(index=None,columns=None)
    df_final['Total']=df_final['Debit']+df_final['Credit']
    出[1]:
    过账日期商户贷记借方合计
    2019年4月18日布鲁克林-20.95 0.00-20.95
    2019年04月20日BOOKM-12.58 0.00-12.58
    2019年04月20日布鲁克林-54.52-36.42-90.94
    2019年04月20日UNI 0.00-89.70-89.70
    ​
    
    那么,您的问题是什么?对于您在问题中包含的样本数据,您希望的输出是什么?谢谢您,Benoit。我也可以用你的解决方案。我只是编辑了这个问题来澄清。有没有办法得到这样的结果?还有,对于Benoit的解决方案,如果我想添加另一个标题为“总计”的列,这将是借方和贷方列的总和,我该怎么做?我刚刚编辑了我的答案,你是在找这样的列吗?谢谢你,Benoit;我看到你清理了它的显示方式,并将发布日期添加到结果中。我尝试了同样的方法,但是我得到了一个“Posted_Date”的关键错误。我尝试将其添加到df_final(您在使用透视表功能之前创建的)中:
    df_final=df_new['posteddate','Merchant','Type','Amount']].groupby(by=['Merchant','Type']).sum().reset_index()
    ,但我仍然收到相同的错误。。。有什么建议吗?这个错误意味着您的数据框中没有名为
    posted\u Date
    的列。不只是叫日期吗?只需使用数据帧的实际列编辑此代码