在python中写入(自定义)枢轴Pandas行到列中

Wat*_*att 1 python pandas

我有pandas数据框以及以下数据

Id   Voter   Vote
123   A      Positive
123   B      Negative
123   C      Positive

223   A      Negative   
223   B      Positive 
223   C      Neutral    
223   D      Negative
Run Code Online (Sandbox Code Playgroud)

对于上面的数据框,我需要像这样的旋转输出

Id   Winner  Confidence
123  Postive  2/3 
223  Negative 2/4     
Run Code Online (Sandbox Code Playgroud)

我将Confidence列值保留为一个分数,以便于阅读,它们可以2/3 = 0.6672/4 = .5

置信度值是根据获胜者的获胜投票计算的.例如,id = 123在总共3票中有两张正票,因此它有2/3的置信度.

如果它变得容易,总会有胜利者.

PS我是python的新手,所以对你的解决方案的任何解释都会有所帮助.

jez*_*ael 5

看来你需要crosstab参数normalize:

df = pd.crosstab(df['Id'], df['Vote'], normalize=0)
print (df)
Vote  Negative  Neutral  Positive
Id                               
123   0.333333     0.00  0.666667
223   0.500000     0.25  0.250000
Run Code Online (Sandbox Code Playgroud)

但如果需要不同的结构用途:


df1 = df.groupby(['Id','Vote']).size()
print (df1)
Id   Vote    
123  Negative    1
     Positive    2
223  Negative    2
     Neutral     1
     Positive    1
dtype: int64

df2 = df1.groupby(level='Id').transform('sum')
print (df2)
Id   Vote    
123  Negative    3
     Positive    3
223  Negative    4
     Neutral     4
     Positive    4
dtype: int64

df3 = df1.div(df2).reset_index(name='col')
print (df3)
    Id      Vote       col
0  123  Negative  0.333333
1  123  Positive  0.666667
2  223  Negative  0.500000
3  223   Neutral  0.250000
4  223  Positive  0.250000
Run Code Online (Sandbox Code Playgroud)