您可以使用DataFrame.pivot
:
df = df.pivot(index='Country', columns='Type', values='Num')
print (df)
Type Bronze Gold Silver
Country
China 26 26 18
GB 17 27 23
Russia 19 19 18
USA 38 46 37
另一種解決方案與DataFrame.set_index
和Series.unstack
:
df = df.set_index(['Country','Type'])['Num'].unstack()
print (df)
Type Bronze Gold Silver
Country
China 26 26 18
GB 17 27 23
Russia 19 19 18
USA 38 46 37
但如果得到:
ValueError: Index contains duplicate entries, cannot reshape
需要pivot_table
一些aggreagte功能,默認情況下它是np.mean
,但你可以用sum
,first
...
#add new row with duplicates value in 'Country' and 'Type'
print (df)
Country Type Num
0 USA Gold 46
1 USA Silver 37
2 USA Bronze 38
3 GB Gold 27
4 GB Silver 23
5 GB Bronze 17
6 China Gold 26
7 China Silver 18
8 China Bronze 26
9 Russia Gold 19
10 Russia Silver 18
11 Russia Bronze 20 < - changed value to 20
11 Russia Bronze 100 < - add new row with duplicates
df = df.pivot_table(index='Country', columns='Type', values='Num', aggfunc=np.mean)
print (df)
Type Bronze Gold Silver
Country
China 26 26 18
GB 17 27 23
Russia 60 19 18 < - Russia get ((100 + 20)/ 2 = 60
USA 38 46 37
或者groupby
與aggreagting mean
,重塑通過unstack
:
df = df.groupby(['Country','Type'])['Num'].mean().unstack()
print (df)
Type Bronze Gold Silver
Country
China 26 26 18
GB 17 27 23
Russia 60 19 18 < - Russia get ((100 + 20)/ 2 = 60
USA 38 46 37
的可能的複製[Python的熊貓:轉換行作爲列標題(HTTP :/ /問題/問題/ 17298313/python-pandas-convert-rows-as-column-headers) – Aprillion
對不起,我可能會濫用熊貓的通用術語。仍然繼續學習:-) – TruLa
@Aprillion - 'pivot_table'沒有必要,如果不是更好的重複是'pivot'。 – jezrael