After using Groupby or pivot count function in pandas how to apply some analysis and geting original data

房东的猫 提交于 2019-12-24 21:37:01

问题


I have a dataset for 15000 Villages,For 1 district,there are 12 blocks/Taluka, In that district there are several crops grown,I have to check that, crop wise sown area for that villages, and select 10 villages for each crop in a random sampling basis , My first step is to remove 0 sown area villages in a data set, after removing 0 sown area I get 6674 villages, next I am check that, in a district,In a block/Taluka how many villages are remaining,so I am use pivot and group by function for check that. After pivot I can seen that In a block/taluka there are only remaining less than 10 number of villages, so in that time I need to deleted that block/taluka which are giving output of less than 10 villages, but next I am struggle to how to get data from using count function, pivot table give that only number 102,42....etc but where I can see that actual data village name,sown area in hec etc..here is my code

import pandas as pd
import numpy as np
d=pd.read_excel("/media/desktop/District.xlsx","Data") 
d.drop(d.loc[d['Area in hec']==0].index, inplace=True) 
d.count()
Sr no             6674
District          6674
Taluka            6674
Revenue Circle    6674
Village Name      6674
Crop              6674
Area in hec       6674

pivot = d.pivot_table(index=['Taluka','Crop'], values=['Area in hec'], aggfunc='count')
pivot=pivot.reset_index()
pivot.loc[pivot['Area in hec'] >= 10]
        Taluka         Crop  Area in hec
0   Ahmednagar        Bajra          102
2   Ahmednagar       Cotton           33
3   Ahmednagar    Greengram           86
4   Ahmednagar        Maize           77
5   Ahmednagar      Redgram           24
6   Ahmednagar     Soyabean           74
7        Akole        Bajra           78
8        Akole    Blackgram           29
10       Akole    Groundnut          162
11       Akole        Maize           91
12       Akole        Paddy          125
13       Akole     Soyabean          129
14     Jamkhed        Bajra           86
15     Jamkhed    Blackgram           87
16     Jamkhed       Cotton           86
17     Jamkhed    Greengram           87
18     Jamkhed    Groundnut           13
19     Jamkhed        Maize           87
20     Jamkhed        Onion           47
21     Jamkhed      Redgram           87
22     Jamkhed     Soyabean           65
23      Karjat        Bajra          119
24      Karjat    Blackgram          111
25      Karjat       Cotton          106
26      Karjat    Greengram          118
27      Karjat    Groundnut           34
28      Karjat        Maize          119
29      Karjat        Onion          107
30      Karjat      Redgram          103
31      Karjat  Sesame(Til)           10
..         ...          ...          ...
63    Pathardi    Groundnut          118
64    Pathardi        Maize          123
65    Pathardi        Onion           77
66    Pathardi      Redgram          132
67    Pathardi  Sesame(Til)           25
68    Pathardi     Soyabean           26
70      Rahuri        Bajra           44
72      Rahuri       Cotton           72
73      Rahuri    Greengram           20
75      Rahuri        Maize           54
77      Rahuri     Soyabean           60
78   Sangamner        Bajra          163
80   Sangamner       Cotton           39
81   Sangamner    Greengram           37
82   Sangamner    Groundnut           75
83   Sangamner        Maize          179
84   Sangamner      Redgram           46
85   Sangamner     Soyabean          137
86    Shevgaon        Bajra           98
88    Shevgaon       Cotton          112
89    Shevgaon    Greengram           31
90    Shevgaon    Groundnut           41
91    Shevgaon        Maize           54
92    Shevgaon        Onion           31
93    Shevgaon      Redgram           98
94    Shevgaon     Soyabean           15
95  Shrirampur        Bajra           15
96  Shrirampur       Cotton           50
97  Shrirampur        Maize           54
99  Shrirampur     Soyabean           40

[85 rows x 3 columns]

Also, I have tried groupby function

Groupby=d.groupby(['Taluka', 'Crop'])['Village Name'].aggregate('count')
Groupby
Taluka      Crop     
Ahmednagar  Bajra        102
            Blackgram      3
            Cotton        33
            Greengram     86
            Maize         77
            Redgram       24
            Soyabean      74
Akole       Bajra         78
            Blackgram     29
            Greengram      9
            Groundnut    162
            Maize         91
            Paddy        125
            Soyabean     129
Jamkhed     Bajra         86
            Blackgram     87
            Cotton        86
            Greengram     87
            Groundnut     13
            Maize         87
            Onion         47
            Redgram       87
            Soyabean      65
Karjat      Bajra        119
            Blackgram    111
            Cotton       106
            Greengram    118
            Groundnut     34
            Maize        119
            Onion        107
                        ... 
Rahuri      Bajra         44
            Blackgram      1
            Cotton        72
            Greengram     20
            Groundnut      8
            Maize         54
            Redgram        7
            Soyabean      60
Sangamner   Bajra        163
            Blackgram      7
            Cotton        39
            Greengram     37
            Groundnut     75
            Maize        179
            Redgram       46
            Soyabean     137
Shevgaon    Bajra         98
            Blackgram      9
            Cotton       112
            Greengram     31
            Groundnut     41
            Maize         54
            Onion         31
            Redgram       98
            Soyabean      15
Shrirampur  Bajra         15
            Cotton        50
            Maize         54
            Redgram        4
            Soyabean      40
Name: Village Name, dtype: int64

now, I want this data i.e list of 102 villages for Ahmednagar block for crop bajra ,33 villages for Ahmednagar block/taluka for crop cotton..etc.

Any help it will helps me to solve this,Thanks


回答1:


I got the answer. The following code I used,

import pandas as pd
import numpy as np
d=pd.read_excel("/media/desktop/District.xlsx","Data") 
d.drop(d.loc[d['Area in hec']==0].index, inplace=True) 
d.count()

def f(x):
    x['No.of Villages'] = x.groupby(['Taluka','Crop'])['Area in hec'].transform('count')
    x['No.of Villages'] = x['No.of Villages'].fillna('')
    return x
df1 = d.groupby(['Taluka','Crop']).apply(f)
Final=df1.loc[df1['No.of Villages'] >= 10]


来源:https://stackoverflow.com/questions/58481693/after-using-groupby-or-pivot-count-function-in-pandas-how-to-apply-some-analysis

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!