Pandas:在独立列中转换列的值

2024-06-01 06:07:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有Pandas数据帧,如下所示(df_olymic)。 我希望在独立列(df_olympic_table)中转换列Type的值

原始数据帧

In [3]: df_olympic
Out[3]: 
   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  19

转换的数据帧

^{pr2}$

实现这一点最方便的方法是什么?在


Tags: 数据pandasdf原始数据silvertypetablegb
1条回答
网友
1楼 · 发布于 2024-06-01 06:07:58

您可以使用^{}

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

另一个带有^{}和{a3}的解决方案:

^{pr2}$

但如果得到:

ValueError: Index contains duplicate entries, cannot reshape

需要^{}和一些aggreagte函数,默认情况下是np.mean,但您可以使用sumfirst。。。在

#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

^{}与聚集^{}并通过^{}整形:

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

相关问题 更多 >