<i id='1ciBt'><tr id='1ciBt'><dt id='1ciBt'><q id='1ciBt'><span id='1ciBt'><b id='1ciBt'><form id='1ciBt'><ins id='1ciBt'></ins><ul id='1ciBt'></ul><sub id='1ciBt'></sub></form><legend id='1ciBt'></legend><bdo id='1ciBt'><pre id='1ciBt'><center id='1ciBt'></center></pre></bdo></b><th id='1ciBt'></th></span></q></dt></tr></i><div id='1ciBt'><tfoot id='1ciBt'></tfoot><dl id='1ciBt'><fieldset id='1ciBt'></fieldset></dl></div>

    1. <tfoot id='1ciBt'></tfoot>
        <bdo id='1ciBt'></bdo><ul id='1ciBt'></ul>
    2. <legend id='1ciBt'><style id='1ciBt'><dir id='1ciBt'><q id='1ciBt'></q></dir></style></legend>

        <small id='1ciBt'></small><noframes id='1ciBt'>

      1. pandas 按日期和年份分组,并汇总金额

        时间:2024-08-22
      2. <tfoot id='RAtXh'></tfoot>

        • <legend id='RAtXh'><style id='RAtXh'><dir id='RAtXh'><q id='RAtXh'></q></dir></style></legend>

                  <tbody id='RAtXh'></tbody>
                <i id='RAtXh'><tr id='RAtXh'><dt id='RAtXh'><q id='RAtXh'><span id='RAtXh'><b id='RAtXh'><form id='RAtXh'><ins id='RAtXh'></ins><ul id='RAtXh'></ul><sub id='RAtXh'></sub></form><legend id='RAtXh'></legend><bdo id='RAtXh'><pre id='RAtXh'><center id='RAtXh'></center></pre></bdo></b><th id='RAtXh'></th></span></q></dt></tr></i><div id='RAtXh'><tfoot id='RAtXh'></tfoot><dl id='RAtXh'><fieldset id='RAtXh'></fieldset></dl></div>

                <small id='RAtXh'></small><noframes id='RAtXh'>

                • <bdo id='RAtXh'></bdo><ul id='RAtXh'></ul>
                  本文介绍了 pandas 按日期和年份分组,并汇总金额的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我有这样的 pandas 数据帧:

                  d = {'dollar_amount': ['200.25', '350.00', '120.00', '400.50', '1231.25', '700.00', '350.00', '200.25', '2340.00'], 'date': ['22-01-2010','22-01-2010','23-01-2010','15-02-2010','27-02-2010','07-03-2010','14-01-2011','09-10-2011','28-07-2012']}
                  df = pd.DataFrame(data=d)
                  
                  df['date'] = pd.to_datetime(df['date'], format='%d-%m-%Y')
                  pd.options.display.float_format = '{:,.4f}'.format
                  df['dollar_amount'] = df['dollar_amount'].astype(float)
                  df
                  
                      date        dollar_amount
                  0   22-01-2010  200.25
                  1   22-01-2010  350.00
                  2   23-01-2010  120.00
                  3   15-02-2010  400.50
                  4   27-02-2010  1231.25
                  5   07-03-2010  700.00
                  6   14-01-2011  350.00
                  7   09-10-2011  200.25
                  8   11-11-2011  2340.00
                  9   12-12-2011  144.50
                  10  12-09-2012  760.00
                  11  22-10-2012  255.00
                  12  28-07-2012  650.00
                  

                  我想计算一年中每一天的金额总和。 所以我这样划分年份:

                  date1 = df[(df['date'] >= '2010-01-01') & (df['date'] < '2011-01-01')]
                  date2 = df[(df['date'] >= '2011-01-01') & (df['date'] < '2012-01-01')]
                  date3 = df[(df['date'] >= '2012-01-01') & (df['date'] < '2013-01-01')]
                  
                  现在我在date1dataframe中有3个日期为2010年的数据帧, 日期为date2中的2011年,日期为date3中的2012年。

                  让我们看一下date1

                  print type(date1)
                  date1
                  
                  <class 'pandas.core.frame.DataFrame'>
                  
                      date        dollar_amount
                  0   2010-01-22  200.2500
                  1   2010-01-22  350.0000
                  2   2010-01-23  120.0000
                  3   2010-02-15  400.5000
                  4   2010-02-27  1,231.2500
                  5   2010-03-07  700.0000
                  

                  接下来,我将按日期汇总金额,因此我将使用以下内容按日期分组:

                  date1 = date1.groupby('date', as_index=False).sum()
                  date1 = date1[['date','dollar_amount']].sort_values(by=['date'], 
                  ascending=True)
                  
                  date2 = date2.groupby('date', as_index=False).sum()
                  date2 = date2[['date','dollar_amount']].sort_values(by=['date'], 
                  ascending=True)
                  
                  date3 = date3.groupby('date', as_index=False).sum()
                  date3 = date3[['date','dollar_amount']].sort_values(by=['date'], 
                  ascending=True)
                  

                  现在让我们看一下日期框date1

                  date1
                  
                  date        dollar_amount
                  0   2010-01-22  550.2500
                  1   2010-01-23  120.0000
                  2   2010-02-15  400.5000
                  3   2010-02-27  1,231.2500
                  4   2010-03-07  700.0000
                  

                  这只是按日期升序对它们进行排序:

                  date1 = date1[['date','dollar_amount']].sort_values(by=['date'], 
                  ascending=True)
                  

                  现在我已经在不同的数据帧中获得了每年美元的日期总和。然后我在绘制每一年的轨迹。它运行良好,完成了任务。但是这个代码是非常冗余的,我正在复制相同的代码,如果我有从2000年到2017年的数据,那么我将不得不复制和粘贴相同的代码18次。我认为做这件事的方法不是很有效。

                  我相信一定有更好的方法来做这件事,但我想不出怎么做。请帮帮我。谢谢。

                  推荐答案

                  我认为您可以通过year创建MultiIndex来输出:

                  df1 = df.groupby('date', as_index=False)['dollar_amount'].sum()
                  df1 = df1.set_index(df['date'].rename('year').dt.year, append=True).swaplevel(0,1)
                  print (df1)
                               date  dollar_amount
                  year                            
                  2010 0 2010-01-22       550.2500
                       1 2010-01-23       120.0000
                       2 2010-02-15       400.5000
                       3 2010-02-27     1,231.2500
                       4 2010-03-07       700.0000
                  2011 5 2011-01-14       350.0000
                       6 2011-10-09       200.2500
                  2012 7 2012-07-28     2,340.0000
                  
                  print (df1.loc[2010])
                          date  dollar_amount
                  0 2010-01-22       550.2500
                  1 2010-01-23       120.0000
                  2 2010-02-15       400.5000
                  3 2010-02-27     1,231.2500
                  4 2010-03-07       700.0000
                  
                  print (df1.loc[2011])
                          date  dollar_amount
                  5 2011-01-14       350.0000
                  6 2011-10-09       200.2500
                  
                  print (df1.loc[2012])
                          date  dollar_amount
                  7 2012-07-28     2,340.0000
                  

                  如果要创建dictionary of DataFrame%s:

                  d = dict(tuple(df.groupby(df['date'].dt.year)))
                  print (d)
                  
                  print (d[2010])
                          date  dollar_amount
                  0 2010-01-22       550.2500
                  1 2010-01-23       120.0000
                  2 2010-02-15       400.5000
                  3 2010-02-27     1,231.2500
                  4 2010-03-07       700.0000
                  
                  print (d[2011])
                          date  dollar_amount
                  5 2011-01-14       350.0000
                  6 2011-10-09       200.2500
                  
                  print (d[2012])
                          date  dollar_amount
                  7 2012-07-28     2,340.0000
                  

                  这篇关于 pandas 按日期和年份分组,并汇总金额的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:通过在不与其他值冲突的情况下追加值来生成序列 下一篇:如何使用pd.Grouper按月对日期进行分组?

                  相关文章

                    <small id='SrsOU'></small><noframes id='SrsOU'>

                    <tfoot id='SrsOU'></tfoot>
                      <bdo id='SrsOU'></bdo><ul id='SrsOU'></ul>
                    <i id='SrsOU'><tr id='SrsOU'><dt id='SrsOU'><q id='SrsOU'><span id='SrsOU'><b id='SrsOU'><form id='SrsOU'><ins id='SrsOU'></ins><ul id='SrsOU'></ul><sub id='SrsOU'></sub></form><legend id='SrsOU'></legend><bdo id='SrsOU'><pre id='SrsOU'><center id='SrsOU'></center></pre></bdo></b><th id='SrsOU'></th></span></q></dt></tr></i><div id='SrsOU'><tfoot id='SrsOU'></tfoot><dl id='SrsOU'><fieldset id='SrsOU'></fieldset></dl></div>

                    1. <legend id='SrsOU'><style id='SrsOU'><dir id='SrsOU'><q id='SrsOU'></q></dir></style></legend>