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