Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用熊猫数据框如何使用多个条件随机选择行数据_Python_Pandas_Random - Fatal编程技术网

Python 使用熊猫数据框如何使用多个条件随机选择行数据

Python 使用熊猫数据框如何使用多个条件随机选择行数据,python,pandas,random,Python,Pandas,Random,我有一个数据集,包含NDVI、Lat、Long、Group、VILLANCE和Taluka列 我想在每个塔鲁卡随机选择10个村庄,每10个村庄随机选择5行数据。但我坚持选择随机函数。因此,在taluka(区块)中,我想选择50个数据值,但有一个条件是选择10个村庄,每个村庄至少需要5个条目,根据“组”列,概率比例概率选择5个点。如果村庄XYZ有70%的面积在“非常差”,则将选择n=5*0.70=3.5样本=4(舍入),因此将为该村庄选择4个数据行。如果村庄XYZ有30%的面积在组中:“好”,则将

我有一个数据集,包含NDVI、Lat、Long、Group、VILLANCE和Taluka列

我想在每个塔鲁卡随机选择10个村庄,每10个村庄随机选择5行数据。但我坚持选择随机函数。因此,在taluka(区块)中,我想选择50个数据值,但有一个条件是选择10个村庄,每个村庄至少需要5个条目,根据“组”列,概率比例概率选择5个点。如果村庄XYZ有70%的面积在“非常差”,则将选择n=5*0.70=3.5样本=4(舍入),因此将为该村庄选择4个数据行。如果村庄XYZ有30%的面积在组中:“好”,则将随机选择n=5*0.30=1.5=2(舍入)


这是一个多步骤的过程

首先,我想与大家分享这些文档:

pandas.DataFrame.sample:

随机选择(seq):

它应该适合你的抽样问题

然后分解你的问题

我想在每个塔鲁卡随机选择10个村庄

获取每个taluka中村庄的唯一列表,创建循环taluka值的子集。获得唯一列表后,对每个列表应用random.choice以获取所选村庄值

创建一个新的数据框,该数据框仅包含选定的值,以获得更高的可见性,而不是流程所需的可见性

每10个村随机抽取5行数据

循环talukas和选定的独特村庄,并应用pandas.DataFrame.sample,每次选择5行

再次保存一个新的数据框以供查看

如果村庄XYZ有70%的面积处于“非常贫困”状态,则将选择n=5*0.70=3.5样本=4(舍入),因此将为该村庄选择4个数据行。如果XYZ村在组中有30%的面积:“好”,则随机选择n=5*0.30=1.5=2(四舍五入)

这里的所有内容都是关于规则的,只需在dataframe的新列中计算所需的指示符即可

根据计算出的指示符值,使用正确的n再次运行pandas.DataFrame.sample函数(您也可以将其添加到数据帧中,这取决于您自己,以及您是否愿意跟踪)

import pandas as pd
import numpy as np
df=pd.read_excel("/home/desktop/Music/Data-Balaghat.xlsx")
def f(x):
    x['No.of Points'] = x.groupby(['Village'])['NDVI'].transform('count')
    x['No.of Points'] = x['No.of Points'].fillna('')
    return x

df1 = df.groupby(['Taluka','Group']).apply(f)
df1 = df.groupby(['Taluka','Village']).apply(f)
sample=df1.loc[df1['No.of Points'] >= 5]
def f(x):
    labels = ['Very Poor','Poor','Average','Good']
    x = x.sort_values('Village','NDVI', ascending=False)
    x['Level'] = pd.qcut(x['NDVI'], 4, labels = labels)
    x['Sum_Level_wise'] = x.groupby(['Village','Level'])['NDVI'].transform('sum')
    x['Probability'] = x['Sum_Level_wise'].div(x['NDVI'].sum()).round(2)
    x['Sample'] = x['Probability'] * x.groupby('Level')['NDVI'].transform('size')
    x['Selected villages'] = x['Sample'].apply(np.ceil).astype(int)
    x['Selected village'] = x.groupby('Level').apply(lambda x: x['Village'].head(x['Selected villages'].iat[0])).reset_index(level=0)['Village']
    x['Selected village'] = x['Selected village'].fillna('')
    return x

df1 = df.groupby(['Taluka','Village']).apply(f)
df1['Selected village'].replace('', pd.np.nan, inplace=True)
df1.dropna(subset=['Selected village'], inplace=True)