Python 使用熊猫;透视表如何使用列(级别)groupby和值进行下一步分析?

Python 使用熊猫;透视表如何使用列(级别)groupby和值进行下一步分析?,python,pandas,numpy,pivot,Python,Pandas,Numpy,Pivot,我想知道使用比例分配法从每个级别抽取多少样本 我一共有3个等级:[小,中,大] 首先,我想为这三个等级取一个总数 接下来,我想找出这三个层次的概率 接下来,我想用这个概率答案乘以这3个等级的样本数 最后一步是:选择样本作为每个级别的顶级村庄 数据: Village Workers Level Aagar 10 Small Dhagewadi 32 Small Sherewadi 34 Sma

我想知道使用比例分配法从每个级别抽取多少样本

我一共有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照片

在第一步中:我想得到level->Small、Medium和High的和值。i、 e(10+32+34+42)=118表示小液位

在下一步中,我想找出每个级别以2位小数舍入的概率。 i、 e(118/786)=0.15表示小液位

并使用每一水平的长度(大小)乘以概率,找出从每一水平中抽取的样本(村庄)数量

i、 对于中等水平,我们的概率为0.25,中等水平有3个村庄。因此,0.25*3=0.75将从中等水平取样。 因此,它将四舍五入到下一个整数0.75~1,这是从中等水平抽取的样本,它将在这一水平抽取顶级村庄。因此,在中等水平的“Dhokri”村将被选中

我做了一些工作

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df=pd.read_csv("/home/desktop/Desktop/t.csv")
df = df.sort('Workers', ascending=True)            
df['level'] = pd.qcut(df['Workers'], 3, ['Small','Medium','Large'])
df
我正在使用此命令获取级别的总和。接下来我要做的是困惑

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

在python中,是否可以像我在excel中获得的那样获得村庄名称?

您可以使用:

  • 对于相同长度的列,
    sum
  • 除以和
  • 另一个
    变换
    具有
    大小
  • 最后一个自定义函数

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

def f(x):
    a = x['Village'].head(x['Selected villages'].iat[0])
    print (x['Village'])
    print (a)
    if (len(x) < len(a)):
        print ('original village cannot be filled to Selected village, because length is higher')
    return a

df['Selected village'] = df.groupby('Level').apply(f).reset_index(level=0)['Village']
df['Selected village'] = df['Selected village'].fillna('')
def(x):
a=x['Village'].head(x['Selected Village'].iat[0])
打印(x[“村庄])
印刷品(a)
如果(len(x)
您可以使用:

  • 对于相同长度的列,
    sum
  • 除以和
  • 另一个
    变换
    具有
    大小
  • 最后一个自定义函数

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

def f(x):
    a = x['Village'].head(x['Selected villages'].iat[0])
    print (x['Village'])
    print (a)
    if (len(x) < len(a)):
        print ('original village cannot be filled to Selected village, because length is higher')
    return a

df['Selected village'] = df.groupby('Level').apply(f).reset_index(level=0)['Village']
df['Selected village'] = df['Selected village'].fillna('')
def(x):
a=x['Village'].head(x['Selected Village'].iat[0])
打印(x[“村庄])
印刷品(a)
如果(len(x)
否,我认为否。有一个例外,如果有多个索引,则所有列都集中在一起,但在您的数据中这是不可能的。我认为数据有问题,请给我一点时间,我编辑答案。超级,我希望尽快发现问题。;)真正有问题的帮助您,因为从不生成pdf:(不,我认为没有。有一个例外,如果有多索引,那么所有列都集中在一起,但在您的数据中这是不可能的。我认为数据有问题,给我一点时间,我编辑答案。超级,我希望尽快找到问题。;)真正有问题的帮助您,因为从不生成pdf:(