Python 如何删除重复行并获取列中3个最常用元素的百分比值?

Python 如何删除重复行并获取列中3个最常用元素的百分比值?,python,pandas,dataframe,Python,Pandas,Dataframe,我有以下数据帧 A B x q x q x k y w y h y w z e z e z e z c 我如何实现这样的目标(以下数据帧的结构可能不正确): 有人能帮我吗?我是python初学者。这将接近您的需要,您可以像您这样进行调整: df.value_counts(normalize=True).mul(100).reset_index() 我更喜欢交叉表 pd.crosstab(df['A'],df['B'],normalize='index') Out[35

我有以下数据帧

A  B
x  q
x  q
x  k
y  w
y  h
y  w
z  e
z  e
z  e
z  c
我如何实现这样的目标(以下数据帧的结构可能不正确):



有人能帮我吗?我是python初学者。

这将接近您的需要,您可以像您这样进行调整:

df.value_counts(normalize=True).mul(100).reset_index()

我更喜欢交叉表

pd.crosstab(df['A'],df['B'],normalize='index')
Out[352]: 
B     c     e         h         k         q         w
A                                                    
x  0.00  0.00  0.000000  0.333333  0.666667  0.000000
y  0.00  0.00  0.333333  0.000000  0.000000  0.666667
z  0.25  0.75  0.000000  0.000000  0.000000  0.000000

我有一个错误:
***AttributeError:“DataFrame”对象没有属性“value\u counts”
完美!老板@卡桑格拉斯可以做得更紧凑一些way@kasangras我提供了一个不同的数据,但如果你把它应用到你的数据中,它也能很好地工作!非常感谢老板!
pd.crosstab(df['A'],df['B'],normalize='index')
Out[352]: 
B     c     e         h         k         q         w
A                                                    
x  0.00  0.00  0.000000  0.333333  0.666667  0.000000
y  0.00  0.00  0.333333  0.000000  0.000000  0.666667
z  0.25  0.75  0.000000  0.000000  0.000000  0.000000
data = pd.DataFrame({"A":["x","x","x","y","y","y"],"B":["q","q","k","w","h","w"]})

regrouped = data.groupby(["A","B"],as_index=False)["B"].size()
regrouped / regrouped.groupby("A").sum()

# output
A  B
x  k    0.333333
   q    0.666667
y  h    0.333333
   w    0.666667
dtype: float64