我有以下数据帧
A B
x q
x q
x k
y w
y h
y w
z e
z e
z e
z c
我如何才能实现这样的目标(下面数据帧的结构可能不正确(:
A B
x (66% q) (33% k)
y (66% w) (33% h)
z (75% e) (25% c)
有人能帮我吗?我是蟒蛇初学者。
我更喜欢crosstab
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
这将接近您的需求,您可以像您一样调整:
df.value_counts(normalize=True).mul(100).reset_index()