【问题标题】:Convert the group by pandas dataframe in proper way以正确的方式按熊猫数据框转换组
【发布时间】:2021-07-09 06:48:29
【问题描述】:

我有类似的数据框

import pandas as pd

emp_df = pd.DataFrame({'empid':[101,101,101,101,102,102],
                   'salary':[1000,1000,1500,2000,3000,4000],
                   'month':['Feb','Mar','Apr','May','Apr','May'],
                   'year':[2020,2020,2021,2021,2019,2021]})
emp_df

原始数据如下:

我试图得到这样的输出:

到目前为止我得到的是:

方法-1:

t1 = emp_df.groupby(["empid", "year"]).agg(
    Total_salary=("salary", "sum")
).reset_index()
t1
t1.pivot_table(columns='year')

方法-2:

t3 = emp_df.groupby(['empid','year']).agg('salary').sum('total').reset_index()
t4 = gp.pivot_table(columns=['empid','year'])
pd.DataFrame(t4.to_records())

基本上我想在这里得到两种类型的输出 -

  1. 如上图所示,每年(1 月至 12 月)每个 empid 的总和(工资)。
  2. 其他方法是计算每个 empid w.r.t 财政年度 (APR-MAR​​) 的总和(工资)。

至少在第一步中,我如何才能正确地表示数据?这两个步骤在 PowerBI 中都很简单,但我想在笔记本上使用相同的逻辑来正确表示输出。

【问题讨论】:

    标签: python pandas aggregate pivot-table


    【解决方案1】:

    首次使用 DataFrame.pivot_table 和聚合函数 sum:

    df = emp_df.pivot_table(index='empid',
                            columns='year', 
                            values='salary', 
                            aggfunc='sum', 
                            fill_value=0)
    print (df)
    year   2019  2020  2021
    empid                  
    101       0  2000  3500
    102    3000     0  4000
    

    第二个首先为财政年度创建新列并传递给pivot_table:

    d = pd.to_datetime(emp_df['year'].astype(str)+emp_df['month'], format='%Y%b')
    
    emp_df['financial_year'] = np.where(d.dt.month > 3,  d.dt.year, d.dt.year-1)
    df2 = emp_df.pivot_table(index='empid',
                            columns='financial_year', 
                            values='salary', 
                            aggfunc='sum', 
                            fill_value=0)
    print (df2)
    
    financial_year  2019  2021
    empid                     
    101             2000  3500
    102             3000  4000
    

    【讨论】:

      猜你喜欢
      • 2013-12-24
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      • 2016-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多