melt pivot_table及str.extact的应用

melt函数

pd.melt(frame,id_vars,value_vars,var_name,value_name,col_level)
frame:需要转换的数据集
id_vars:不需要转换的列名
value_vars:需要转换的列名,如果除了不需要转换的剩下的全部都需要转化则可以省略不写
var_name:将列名转置行后新命名的列名
value_name:给值重新命名的列名

例子:

 df=pd.dataframe({  
'city':{0:'china',1:'china',2:'china'},
'code':{0:'a',1:'b',2:'c'},
'level':{0:'sku',1:'brand',2:'cat'},
'value201601':{0:1,1:2,2:3},
'value201602':{0:2,1:4,2:5}} )
CityCodeLevelValue200601Value200602
0ChinaaSKU12
1ChinabBrand24
2ChinacCAT35
pd.melt(df,id_vars=['City','Code','Level'],var_name='trans_all',value_name='value')
CityCodeLeveltrans_allvalue
0ChinaaSKUValue2006011
1ChinabBrandValue2006012
2ChinacCATValue2006013
3ChinaaSKUValue2006022
4ChinabBrandValue2006024
5ChinacCATValue2006025

如果没有设置var_name,则默认为variable

data=pd.melt(df,id_vars=['City','Code','Level'],value_name='value')
CityCodeLevelvariablevalue
0ChinaaSKUValue2006011
1ChinabBrandValue2006012
2ChinacCATValue2006013
3ChinaaSKUValue2006022
4ChinabBrandValue2006024
5ChinacCATValue2006025

pivot_table函数

pivote_table(data,value,index,columns)
data:需要转换的数据
index:不需要转换的列名(固定不变的列)
columns:需要将某列的值转化为列名的列名
value:值所对应的列名

例子:

data.pivot_table(index=['City','Code','Level'],columns=['variable'],values='value').reset_index()
variableCityCodeLevelValue200601Value200602
0ChinaaSKU12
1ChinabBrand24
2ChinacCAT35

df=pd.DataFrame({
'From_To':['LoNDon_paris','Madrid_miLAN','londON_StockhOlm','Budapest_PaRis','Brussels_londOn'],
'FlighNumber':[10045.0,np.nan,10065.0,np.nan,10085.0],
'RecenDelays':[[23,47],[],[24,43,87],[13],[67,32]],
'Ariline':['KLM(!)','<Air France>(12)','(British Airways.)','12. Air France','"Swiss Air"']
})

Frome_toFlighNumberRecenDelaysAriline
0LoNDon_paris10045.0[23,47]KLM(!)
1Madrid_miLANNaN[](12)
2iondON_StockhOlm10065.0[24,43,87](British Airways.)
3Budapest_PaRisNaN[13]12. Air France
4Brussels_londOn10085.0[67,32]“Swiss Air”
将某列的值转化为大写
df['From_to']=df.From_to.str.upper()
将某列的值转化为小写
df.From_to.str.lower()

将form_to 分开为from to 两列

方法一:

df1=df.From_to.str.split('_',expand=True).rename(columns={0:'From',1:'to'})

df_new=df1.join(df.drop('From_to',axis=1))

df_new['Ariline']=df.Ariline.str.extract('([a-zA-Z\s)]+)')

From	to	FlighNumber	RecenDelays	Ariline
FromtoFlithNumberRecenDelaysAriline
0LONDONPARIS10045.0[23,47]KLM
1MADRIDMILANNaN[]Air France
2IONDONSTOCKHOLM10065.0[24,43,87]British Airways
3BUDAPESTPARISNaN[13]Air France
4BRUSSELSLONDON10085.0[67,32]Swiss Air

###方法二:

df2=df.From_to.str.extract('([a-zA-Z\s]+)_([a-zA-Z\s]+)').rename(columns={0:'from',1:'to'})
df3=df.drop('From_to',axis=1)
df_new1=df2.join(df3)
df_copy=df_new1.copy()
df_copy.drop('RecenDelays',axis=1,inplace=True) 
df_copy.fillna(0)
FromtoFlithNumberRecenDelaysAriline
0LONDONPARIS10045.0[23,47]KLM
1MADRIDMILAN0.0[]Air France
2IONDONSTOCKHOLM10065.0[24,43,87]British Airways
3BUDAPESTPARIS0.0[13]Air France
4BRUSSELSLONDON10085.0[67,32]Swiss Air
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值