• <bdo id='gsELq'></bdo><ul id='gsELq'></ul>
    <legend id='gsELq'><style id='gsELq'><dir id='gsELq'><q id='gsELq'></q></dir></style></legend>

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

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

        不同列的分组,不同的列与下一日期的累加和进行聚集

        Groupby of different columns with different aggreagation with cumsum for next date(不同列的分组,不同的列与下一日期的累加和进行聚集)

          <tfoot id='AlSdk'></tfoot>
          • <small id='AlSdk'></small><noframes id='AlSdk'>

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

                  <tbody id='AlSdk'></tbody>
                  本文介绍了不同列的分组,不同的列与下一日期的累加和进行聚集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我有一个按日期和时间排序的数据帧,如下所示:

                   ID     Date     Time      A         B      C
                   abc   06/Feb     11       12        12     10 
                   abc   06/Feb     12       14        13     5
                   xyz   07/Feb      1       16        14     50
                   xyz   07/Feb      2       18        15     0
                   xyz   07/Feb      3       20        16     10
                  

                  我想按ID和日期分组,并以SUM为分子,COUNT为分母,但对于下一个日期,总和将是前几个日期的累加,COUNT将作为Cumcount,A、B、C列的最后一个值的另外3列将被添加。例如:

                  ID    Date     A_Num  A_denom   B_Num   B_Denom  C_Num   C_Denom  A_Last  B_Last  C_Last
                  abc   06/Feb    26       2        25       2      15        2       14      13      5
                  xyz   07/Feb    54       3        45       3      60        3       20      16      10
                  

                  我不能一次完成所有这些操作..有人能在这方面帮助我吗?提前谢谢。

                  现在我想将df1 acc中的df2添加到id为:

                  ID    Date     A_Num  A_denom   B_Num   B_Denom  C_Num   C_Denom  A_Last  B_Last  C_Last
                  abc   06/Feb    52       4        50       4      30        4       14      13      5
                  xyz   07/Feb    108      6        90       6      120       6       20      16      10
                  

                  推荐答案

                  您可以在GroupBy.agg中按组聚合sumsizelast,然后选择numdenum并使用累加和上次添加者concat由Aggregate创建的另一个数据帧GroupBy.last

                  cols = ['A','B','C']
                  
                  print (df[cols].dtypes)
                  A    int64
                  B    int64
                  C    int64
                  dtype: object
                  
                  d = {'sum':'Num','size':'denom'}
                  df1 = df.groupby(['ID','Date'])[cols].agg(['sum','size']).rename(columns=d).cumsum()
                  df1.columns = df1.columns.map(lambda x: f'{x[0]}_{x[1]}')
                  
                  df2 = df.groupby(['ID','Date'])[cols].last().add_suffix('_Last')
                  df3 = pd.concat([df1, df2], axis=1).reset_index()
                  
                  print (df3)
                      ID    Date  A_Num  A_denom  B_Num  B_denom  C_Num  C_denom  A_Last  
                  0  abc  06/Feb     26        2     25        2     15        2      14   
                  1  xyz  07/Feb     80        5     70        5     75        5      20   
                  
                     B_Last  C_Last  
                  0      13       5  
                  1      16      10  
                  

                  对于不使用索引的文件写入:

                  df3.to_csv('file', index=False)
                  

                  如果解决方案使用中没有.reset_index

                  df3.to_csv('file')
                  

                  这篇关于不同列的分组,不同的列与下一日期的累加和进行聚集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  groupby multiple coords along a single dimension in xarray(在xarray中按单个维度的多个坐标分组)
                  Group by and Sum in Pandas without losing columns(Pandas中的GROUP BY AND SUM不丢失列)
                  Is there a way of group by month in Pandas starting at specific day number?( pandas 有从特定日期开始的按月分组的方式吗?)
                  Group by + New Column + Grab value former row based on conditionals(GROUP BY+新列+基于条件的前一行抓取值)
                  Groupby and interpolate in Pandas(PANDA中的Groupby算法和插值算法)
                  Pandas - Group Rows based on a column and replace NaN with non-null values(PANAS-基于列对行进行分组,并将NaN替换为非空值)

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

                  <small id='6BSWW'></small><noframes id='6BSWW'>

                  1. <tfoot id='6BSWW'></tfoot>
                      • <bdo id='6BSWW'></bdo><ul id='6BSWW'></ul>

                            <tbody id='6BSWW'></tbody>
                          <legend id='6BSWW'><style id='6BSWW'><dir id='6BSWW'><q id='6BSWW'></q></dir></style></legend>