Pandas学习打卡

import numpy as np
import pandas as pd
df = pd.read_csv("F:/data/Drugs.csv",index_col = ['State','COUNTY']).sort_index()
result = pd.pivot_table(df,index=['State','COUNTY','SubstanceName'],columns='YYYY',values='DrugReports',fill_value='-').reset_index().rename_axis(columns={'YYYY':''})
result.head()
StateCOUNTYSubstanceName20102011201220132014201520162017
0KYADAIRBuprenorphine-354275710
1KYADAIRCodeine--1----1
2KYADAIRFentanyl--1-----
3KYADAIRHeroin--12-1-2
4KYADAIRHydrocodone69101097113
result_melted = result.melt(id_vars=result.columns[:3],value_vars=result.columns[-8:],var_name='YYYY',value_name='DrugReports').query('DrugReports != "-"')
result2 = result_melted.sort_values(by=['State','COUNTY','YYYY','SubstanceName']).reset_index().drop(columns='index')
cols = list(result2.columns)
a, b = cols.index('SubstanceName'), cols.index('YYYY')
cols[b], cols[a] = cols[a], cols[b]
result2 = result2[cols].astype({'DrugReports':'int','YYYY':'int'})
result2.head()
result2.head()
StateCOUNTYYYYYSubstanceNameDrugReports
0KYADAIR2010Hydrocodone6
1KYADAIR2010Methadone1
2KYADAIR2011Buprenorphine3
3KYADAIR2011Hydrocodone9
4KYADAIR2011Morphine2
df_tidy = df.reset_index().sort_values(by=result2.columns[:4].tolist()).reset_index().drop(columns='index')
df_tidy.equals(result2)
False
df = pd.read_csv('F:data/Earthquake.csv')
df = df.sort_values(by=df.columns.tolist()[:3]).sort_index(axis=1).reset_index().drop(columns='index')
result = pd.pivot_table(df,index=['日期','时间','维度','经度'],columns='方向',values=['烈度','深度','距离'],fill_value='-').stack(level=0).rename_axis(index={None:'地震参数'})
result.head(6)
方向eastnorthnorth_eastnorth_westsouthsouth_eastsouth_westwest
日期时间维度经度地震参数
1912.08.0912:29:00 AM40.627.2深度-----16--
烈度-----6.7--
距离-----4.3--
1912.08.1012:23:00 AM40.627.1深度------15-
烈度------6-
距离------2-
df_result = result.unstack().stack(0)[(~(result.unstack().stack(0)=='-')).any(1)].reset_index()
df_result.columns.name=None
df_result = df_result.sort_index(axis=1).astype({'深度':'float64','烈度':'float64','距离':'float64'})
df_result.head()
方向日期时间深度烈度经度维度距离
0south_east1912.08.0912:29:00 AM16.06.727.240.64.3
1south_west1912.08.1012:23:00 AM15.06.027.140.62.0
2south_west1912.08.1012:30:00 AM15.05.227.140.62.0
3south_east1912.08.1112:19:04 AM30.04.927.240.64.3
4south_west1912.08.1112:20:00 AM15.04.527.140.62.0
df_result.astype({'深度':'float64','烈度':'float64','距离':'float64'},copy=False).dtypes
方向     object
日期     object
时间     object
深度    float64
烈度    float64
经度    float64
维度    float64
距离    float64
dtype: object
df.equals(df_result)
True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值