溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

pandas如何實(shí)現(xiàn)寬表變窄表

發(fā)布時(shí)間:2020-08-04 11:05:12 來源:億速云 閱讀:203 作者:小豬 欄目:開發(fā)技術(shù)

小編這次要給大家分享的是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)。

示例

StuIDTypeNum
0111021Math89
1111021English93
2312983English91
3314621English82
4314621Math92
5112341Math82

目的:轉(zhuǎn)換成如下表格

StuIDEnglishMath
01110219389
131298391NaN
23146218292
3112341NaN82

方案一

pandas如何實(shí)現(xiàn)寬表變窄表

具體代碼如下

#將'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é)果

pandas如何實(shí)現(xiàn)寬表變窄表

看完這篇關(guān)于pandas如何實(shí)現(xiàn)寬表變窄表的文章,如果覺得文章內(nèi)容寫得不錯(cuò)的話,可以把它分享出去給更多人看到。

向AI問一下細(xì)節(jié)

免責(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)容。

AI