DataWhale & Pandas(五、变形)

DataWhale & Pandas(五、变形)


Pandas学习手册


学习大纲: 


import numpy as np

import pandas as pd

Ex1:美国非法药物数据集

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

df = pd.read_csv('data/drugs.csv').sort_values([
            'State','COUNTY','SubstanceName'],ignore_index=True)

df.head(3)

将数据转为如下的形式:

../_images/Ex5_1.png

result = df.pivot(index=['State', 'COUNTY', 
                'SubstanceName'], columns='YYYY', 
                 values='DrugReports',
                 fill_value='-').reset_index().rename_axis(columns={'YYYY':''}) 
print(result)

将第1问中的结果恢复为原表。

recover = dft.melt(id_vars = ['State', 'COUNTY', 'SubstanceName'],
          value_vars = dft.columns[-8:],var_name = 'YYYY',
                     value_name = 'DrugReports').dropna(subset = ['DrugReports'])
print(recover)

按 State 分别统计每年的报告数量总和,其中 State, YYYY 分别为列索引和行索引,要求分别使用 pivot_table 函数与 groupby+unstack 两种不同的策略实现,并体会它们之间的联系。

res = df.groupby(['State', 'YYYY'])['DrugReports'].sum().unstack(0)
print(res)

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
 
Class
Name
Chinese
Math
0 1
San Zhang
80 80
1 2
 Si Li
90 75
df = pd.DataFrame({'Class':[1,2],
                   'Name':['San Zhang', 'Si Li'],
                   'Chinese':[80, 90],'Math':[80, 75]})
df = df.rename(columns = {'Chinese':'pre_Chinese', 
                            'Math': 'pre_Math'})
extable = pd.wide_to_long(df,
                stubnames=['pre'],i = ['Class','Name'],
                j='Subject',sep='_',
                suffix='.+').reset_index().rename(columns={'pre':'Grade'})
print(extable)

猜你喜欢

转载自blog.csdn.net/adminkeys/article/details/111827881