以正确的方式通过 pandas 数据框转换组
Convert the group by pandas dataframe in proper way
我有这样的数据框
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())
基本上我想在这里获得两种类型的输出 -
- 一个如上所示,其总和(薪水)per empid w.r.t year wise(JAN-DEC).
- 其他人会计算每个 empid w.r.t 财政年度的总和(薪水)(APR-MAR)。
我怎样才能至少在第一步中正确表示数据?这两个步骤在 PowerBI 中都很简单,但我想在笔记本上使用相同的逻辑来正确表示输出。
首次使用 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
我有这样的数据框
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())
基本上我想在这里获得两种类型的输出 -
- 一个如上所示,其总和(薪水)per empid w.r.t year wise(JAN-DEC).
- 其他人会计算每个 empid w.r.t 财政年度的总和(薪水)(APR-MAR)。
我怎样才能至少在第一步中正确表示数据?这两个步骤在 PowerBI 中都很简单,但我想在笔记本上使用相同的逻辑来正确表示输出。
首次使用 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