您好,登錄后才能下訂單哦!
小編這次要給大家分享的是pandas如何實(shí)現(xiàn)寬表變窄表,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。
我就廢話不多說了,還是直接看代碼吧!
import pandas as pd # 偽造一些數(shù)據(jù) 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 # 轉(zhuǎn)換為窄表 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
補(bǔ)充知識:pandas從單條目數(shù)據(jù)集生成寬表
需求
場景
從醫(yī)院數(shù)據(jù)庫中導(dǎo)出了大量的體檢數(shù)據(jù),但體檢數(shù)據(jù)表中,每一行代表某人某次體檢的某一項(xiàng)體檢的結(jié)果。目的想將每一個(gè)人的每一次體檢結(jié)果作為一行存儲,每一列為體檢項(xiàng)。
示例
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 |
目的:轉(zhuǎn)換成如下表格
StuID | English | Math | |
---|---|---|---|
0 | 111021 | 93 | 89 |
1 | 312983 | 91 | NaN |
2 | 314621 | 82 | 92 |
3 | 112341 | NaN | 82 |
方案一
具體代碼如下
#將'B'列的類別調(diào)整為行。 #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)
結(jié)果
看完這篇關(guān)于pandas如何實(shí)現(xiàn)寬表變窄表的文章,如果覺得文章內(nèi)容寫得不錯(cuò)的話,可以把它分享出去給更多人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。