【问题标题】:Using Pandas how to use next step analysis for getting data使用 Pandas 如何使用下一步分析获取数据
【发布时间】:2017-06-05 14:03:14
【问题描述】:

我有数据:

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

代码:

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=False)           
df['Level'] = pd.qcut(df['Workers'], 3, ['Small','Medium','Large'])
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)


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('')

print (df)

接下来,我得到了在抽样中选择的村庄

所以,我只想选择村庄名称对应的工人详细信息和级别列。

像这样:(Excel照片)

所以,我只想要那个村名,因为我不想显示每个步骤。

仅使用5个村庄的采样,将显示该数据,有帮助吗?

【问题讨论】:

    标签: python pandas numpy


    【解决方案1】:

    看来你需要head:

    result_df= df.head(n=5)
    result_df
    

    result_df 将是:

        Village   Workers Level Sum_Level_wise Probability Sample Selected villages Selected village
    7   Takali    127     Large  474           0.60        2.40   3                 Takali
    8   Gardhani  122     Large  474           0.60        2.40   3                 Gardhani
    9   Pi.Khand  120     Large  474           0.60        2.40   3                 Pi.Khand
    10  Pangri    105     Large  474           0.60        2.40   3 
    4   Dhokari   84      Medium 194           0.25        0.75   1                 Dhokari
    

    如果您只需要“村庄”、“工人”和“级别”列,请尝试:

    result_df[['Village','Workers','Level']]
    

    它会给你:

        Village     Workers Level
    7   Takali      127     Large
    8   Gardhani    122     Large
    9   Pi.Khand    120     Large
    10  Pangri      105     Large
    4   Dhokari     84      Medium
    

    更新:

    df['Selected village'].replace('', pd.np.nan, inplace=True)
    df.dropna(subset=['Selected village'], inplace=True)
    df[['Workers','Level','Selected village']]
    

    它会给出:

        Workers Level   Selected village
    0   10      Small   Aagar
    4   84      Medium  Dhokari
    7   127     Large   Takali
    8   122     Large   Gardhani
    9   120     Large   Pi.Khand
    

    【讨论】:

    • 我想要仅在 df['selected village'] 中创建的村庄名称。不是 head(n) 我们可以在这里使用。例如:在我的问题中,最后一列有 5 个村庄 --> 选定的村庄列,有 5 个村庄 1)Takali 2)Gardhani 3)Pi.Khand 4)Dokari 5)Shindwad 被选中.. 所以,我只想要这 5 个村庄名称,其中包含与该村庄对应的工人数列和级别
    猜你喜欢
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 2020-08-11
    相关资源
    最近更新 更多