以正确的方式按 Dataframe 转换组

afdcj2ne  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(485)

我有一个 Dataframe

  1. import pandas as pd
  2. emp_df = pd.DataFrame({'empid':[101,101,101,101,102,102],
  3. 'salary':[1000,1000,1500,2000,3000,4000],
  4. 'month':['Feb','Mar','Apr','May','Apr','May'],
  5. 'year':[2020,2020,2021,2021,2019,2021]})
  6. emp_df

原始数据如下所示:

我试图得到如下输出:

到目前为止,我得到的是:
方法-1:

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


方法2:

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


基本上我想得到两种类型的输出-
如上所示,每年(1月至12月)每个empid w.r.t的总金额(工资)。
另一个是计算每个empid w.r.t财政年度(4月至3月)的总额(工资)。
至少在第一步中,如何正确表示数据?这两个步骤在powerbi中都很简单,但我希望在笔记本上使用相同的逻辑来正确表示输出。

vzgqcmou

vzgqcmou1#

首次使用 DataFrame.pivot_table 具有聚集函数 sum :

  1. df = emp_df.pivot_table(index='empid',
  2. columns='year',
  3. values='salary',
  4. aggfunc='sum',
  5. fill_value=0)
  6. print (df)
  7. year 2019 2020 2021
  8. empid
  9. 101 0 2000 3500
  10. 102 3000 0 4000

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

  1. d = pd.to_datetime(emp_df['year'].astype(str)+emp_df['month'], format='%Y%b')
  2. emp_df['financial_year'] = np.where(d.dt.month > 3, d.dt.year, d.dt.year-1)
  3. df2 = emp_df.pivot_table(index='empid',
  4. columns='financial_year',
  5. values='salary',
  6. aggfunc='sum',
  7. fill_value=0)
  8. print (df2)
  9. financial_year 2019 2021
  10. empid
  11. 101 2000 3500
  12. 102 3000 4000
展开查看全部

相关问题