第五章 变形

学习参考:https://github.com/datawhalechina/joyful-pandas

Ex1:美国非法药物数据集

现有一份关于美国非法药物的数据集,其中SubstanceName, DrugReports分别指药物名称和报告数量:

dfpd.read_csv('../data/Drugs.csv').sort_values(['State','COUNTY','SubstanceName'],ignore_index=True)
df.head(3)

第五章 变形_第1张图片

  1. 将数据转为如下的形式:
    第五章 变形_第2张图片
  2. 将第1问中的结果恢复为原表。
  3. State分别统计每年的报告数量总和,其中State, YYYY分别为列索引和行索引,要求分别使用pivot_table函数与groupby+unstack两种不同的策略实现,并体会它们之间的联系。
#1、转换数据框
df1 = df.pivot(index=['State','COUNTY','SubstanceName'], columns='YYYY', values='DrugReports').reset_index().rename_axis(columns={
     'YYYY':''})
df1.head()

第五章 变形_第3张图片

#2、将第1问中的结果恢复为原表。
df2 = df1.melt(id_vars = ['State','COUNTY','SubstanceName'],
               value_vars = df1.columns[3:],var_name = 'YYYY',
               value_name = 'DrugReports').dropna(subset = ['DrugReports']).astype({
     'YYYY':'int64','DrugReports':'int64'})
df2 = df2.sort_values(['State','COUNTY','SubstanceName'],ignore_index=True).reindex_like(df)
df2.equals(df)  # True
#3.按State分别统计每年的报告数量总和,其中State, YYYY分别为列索引和行索引,要求分别使用pivot_table函数与groupby+unstack两种不同的策略实现,并体会它们之间的联系。
#(1)使用pivot_table函数
df3 = df.pivot_table(index = 'YYYY',columns = 'State',values = 'DrugReports',aggfunc = 'sum')
df3.head()

第五章 变形_第4张图片

#(2)使用groupby+unstack,这个方法没有想出来,答案的做法是:
df4 = df.groupby(['State', 'YYYY'])['DrugReports'].sum().to_frame()
df4.head()

第五章 变形_第5张图片

df4 = df4.unstack(0).droplevel(0,axis=1)
df4.head()

第五章 变形_第6张图片

Ex2:特殊的wide_to_long方法

从功能上看,melt方法应当属于wide_to_long的一种特殊情况,即stubnames只有一类。请使用wide_to_long生成melt一节中的df_melted。(提示:对列名增加适当的前缀)

df = pd.DataFrame({
     'Class':[1,2],
                   'Name':['San Zhang', 'Si Li'],
                   'Chinese':[80, 90],
                   'Math':[80, 75]})
df

在这里插入图片描述

df1 = df.rename(columns={
     'Chinese':'pre_Chinese', 'Math':'pre_Math'})
df2 = pd.wide_to_long(df1,
                stubnames=['pre'],
                i = ['Class', 'Name'],
                j = 'subject',
                sep = '_',
                suffix = '.+').reset_index().rename(columns={
     'pre':'Grade'})
df2

第五章 变形_第7张图片

你可能感兴趣的:(datawhale,python)