问题
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