1. 程式人生 > 程式設計 >pandas使用之寬表變窄表的實現

pandas使用之寬表變窄表的實現

我就廢話不多說了,還是直接看程式碼吧!

import pandas as pd
# 偽造一些資料
fake_data = {'subject':['math','english'],'A': [88,90],'B': [70,80],'C': [60,78]}

# 寬表
test = pd.DataFrame(fake_data,columns=['subject','A','B','C'])
test
	subject	A	B	C
0	math	88	70	60
1	english	90	80	78

# 轉換為窄表
pd.melt(test,id_vars=['subject'])

subject	variable	value
0	math	A	88
1	english	A	90
2	math	B	70
3	english	B	80
4	math	C	60
5	english	C	78

補充知識:pandas從單條目資料集生成寬表

需求

場景

從醫院資料庫中匯出了大量的體檢資料,但體檢資料表中,每一行代表某人某次體檢的某一項體檢的結果。目的想將每一個人的每一次體檢結果作為一行儲存,每一列為體檢項。

示例

StuID Type Num
0 111021 Math 89
1 111021 English 93
2 312983 English 91
3 314621 English 82
4 314621 Math 92
5 112341 Math 82

目的:轉換成如下表格

StuID English Math
0 111021 93 89
1 312983 91 NaN
2 314621 82 92
3 112341 NaN 82

方案一

pandas使用之寬表變窄表的實現

具體程式碼如下

#將'B'列的類別調整為行。
#1
num = df[~df.duplicated(subset=['StuID'])].loc[:,'StuID'].to_list()
#2
result_df = pd.DataFrame({'StuID': np.array(num)},columns=['StuID','English','Math'])
#3
for i in df.index:
  t = df.loc[i,'Type']
  num = df.loc[i,'StuID']
  result_df.loc[result_df['StuID'] == num,[t]] = df.loc[i,'Num']
print(result_df)

結果

pandas使用之寬表變窄表的實現

以上這篇pandas使用之寬表變窄表的實現就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。