gpt4 book ai didi

python - Pandas:如何找到每个子组的组成员类型的百分比?

转载 作者:行者123 更新时间:2023-12-04 16:30:46 25 4
gpt4 key购买 nike

(数据样本和问题末尾的尝试)

使用这样的数据框:

    Type    Class   Area    Decision
0 A 1 North Yes
1 B 1 North Yes
2 C 2 South No
3 A 3 South No
4 B 3 South No
5 C 1 South No
6 A 2 North Yes
7 B 3 South Yes
8 B 1 North No
9 C 1 East No
10 C 2 West Yes

我怎样才能找到每种类型的百分比 [A, B, C, D]属于各个区域 [North, South, East, West] ?

期望的输出:
    North   South   East    West
A 0.66 0.33 0 0
B 0.5 0.5 0 0
C 0 0.5 0.25 0.25

到目前为止,我最好的尝试是:
df_attempt1= df.groupby(['Area', 'Type'])['Type'].aggregate('count').unstack().T

返回:
Area  East  North  South  West
Type
A NaN 2.0 1.0 NaN
B NaN 2.0 2.0 NaN
C 1.0 NaN 2.0 1.0

我想我可以通过计算边距中的总和并附加 0对于遗漏的观察,但我真的很感激关于更优雅方法的建议。

感谢您的任何建议!

代码:

import pandas as pd

df = pd.DataFrame(
{
"Type": {0: "A", 1: "B", 2: "C", 3: "A", 4: "B", 5: "C", 6: "A", 7: "B", 8: "B", 9: "C", 10: "C"},
"Class": {0: 1, 1: 1, 2: 2, 3: 3, 4: 3, 5: 1, 6: 2, 7: 3, 8: 1, 9: 1, 10: 2},
"Area": {0: "North", 1: "North", 2: "South", 3: "South", 4: "South", 5: "South", 6: "North", 7: "South", 8: "North", 9: "East", 10: "West"},
"Decision": {0: "Yes", 1: "Yes", 2: "No", 3: "No", 4: "No", 5: "No", 6: "Yes", 7: "Yes", 8: "No", 9: "No", 10: "Yes"},
}
)

dfg = df[['Area', 'Type']].groupby(['Area']).agg('count').unstack()

df_attempt1 = df.groupby(['Area', 'Type'])['Type'].aggregate('count').unstack().T

最佳答案

您可以使用功能 crosstab :

pd.crosstab(index=df['Type'], columns=df['Area'], normalize='index')
输出:
Area  East     North     South  West
Type
A 0.00 0.666667 0.333333 0.00
B 0.00 0.500000 0.500000 0.00
C 0.25 0.000000 0.500000 0.25

关于python - Pandas:如何找到每个子组的组成员类型的百分比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59947052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com