在pandas中使用Groupby或pivot count函数后,如何应用一些分析和获取原始数据

2024-09-28 01:26:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个15000个村庄的数据集,对于1个地区,有12个街区/塔鲁卡,在该地区种植了几种作物,我必须检查该村庄的作物播种面积,并为每种作物随机抽样选择10个村庄,我的第一步是删除数据集中的0个播种面积村庄,在移除0个播种区域后,我得到6674个村庄,接下来我检查在一个地区,在一个街区/塔鲁卡还有多少村庄,所以我使用pivot和group by函数来检查。pivot之后,我可以看到在一个block/taluka中只剩下不到10个村庄,所以在这段时间内,我需要删除给出不到10个村庄输出的block/taluka,但接下来我将很难使用count函数获取数据,pivot表只给出了102,42….等,但我可以看到实际的数据村名称,种植面积在高等教育等…这是我的代码

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]

此外,我还尝试了groupby函数

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

现在,我想要这个数据,即作物巴吉拉的艾哈迈德纳加尔区块的102个村庄,作物棉花的艾哈迈德纳加尔区块/塔鲁卡的33个村庄……等等

任何帮助都能帮我解决这个问题,谢谢


Tags: pivotcotton村庄jamkhedsoyabeanmaizeahmednagarsangamner
1条回答
网友
1楼 · 发布于 2024-09-28 01:26:48

我知道答案了。我用了下面的代码

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]

相关问题 更多 >

    热门问题