使用Pandas&Pivot表如何使用column(level)groupby sum值进行下一步分析?

2024-07-04 16:18:36 发布

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

我想用比例分配法找出每一个层次上会有多少样本。在

我一共有3个级别:【小,中,大】。在

首先,我要计算这3级的总和

接下来,我要找出这三个层次的概率

下一步,我想用这个概率答案乘以这3个水平的样本数

最后一步是:每一级都将选择样本作为顶级村庄。在

数据:

Village     Workers       Level
Aagar       10            Small
Dhagewadi   32            Small
Sherewadi   34            Small
Shindwad    42            Small
Dhokari     84            Medium
Khanapur    65            Medium
Ambikanagar 45            Medium
Takali      127           Large
Gardhani    122           Large
Pi.Khand    120           Large
Pangri      105           Large

让我解释一下,我附上excel照片

enter image description here

第一步:我想得到级别->小、中、高的和值。i、 e(10+32+34+42)=118(小水平)。在

enter image description here

在下一步中,我想找出每一级的概率,四舍五入到小数点后两位。 i、 e(118/786)=0.15(小水平)。在

enter image description here

用每个层次的长度(大小)乘以概率来计算每个层次上抽取了多少个样本(村庄)。在

也就是说,对于中等水平,我们有0.25的概率,我们有3个村庄处于中等水平。因此,0.25*3=0.75将从中等水平取样。 因此,从中等水平上取下一个0.75~1个样本,四舍五入到下一个整数,取该水平的顶层村。所以,在中等水平的“Dhokri”村将被选中

我做了一些工作

^{pr2}$

我用这个命令来计算等级的总和。接下来要做什么我很困惑

df=df.groupby(['level'])['Workers'].aggregate(['sum']).unstack()

在python中,有没有可能得到我在excel中得到的村庄名称?在


Tags: 答案df水平概率级别excel比例small
1条回答
网友
1楼 · 发布于 2024-07-04 16:18:36

您可以使用:

  • ^{}与{}相同长度的列
  • ^{}除以sum^{}
  • 另一个transform,带有{}
  • 上次自定义函数

df['Sum_Level_wise'] = df.groupby('Level')['Workers'].transform('sum')
df['Probability'] = df['Sum_Level_wise'].div(df['Workers'].sum()).round(2)
df['Sample'] = df['Probability'] * df.groupby('Level')['Workers'].transform('size')
df['Selected villages'] = df['Sample'].apply(np.ceil).astype(int)

df['Selected village'] = df.groupby('Level')
                           .apply(lambda x: x['Village'].head(x['Selected villages'].iat[0]))
                           .reset_index(level=0)['Village']
df['Selected village'] = df['Selected village'].fillna('')
print (df)
        Village  Workers   Level  Sum_Level_wise  Probability  Sample  \
0         Aagar       10   Small             118         0.15    0.60   
1     Dhagewadi       32   Small             118         0.15    0.60   
2     Sherewadi       34   Small             118         0.15    0.60   
3      Shindwad       42   Small             118         0.15    0.60   
4       Dhokari       84  Medium             194         0.25    0.75   
5      Khanapur       65  Medium             194         0.25    0.75   
6   Ambikanagar       45  Medium             194         0.25    0.75   
7        Takali      127   Large             474         0.60    2.40   
8      Gardhani      122   Large             474         0.60    2.40   
9      Pi.Khand      120   Large             474         0.60    2.40   
10       Pangri      105   Large             474         0.60    2.40   

    Selected villages Selected village  
0                   1            Aagar  
1                   1                   
2                   1                   
3                   1                   
4                   1          Dhokari  
5                   1                   
6                   1                   
7                   3           Takali  
8                   3         Gardhani  
9                   3         Pi.Khand  
10                  3                 

您可以尝试使用自定义函数进行调试:

^{pr2}$

相关问题 更多 >

    热门问题