Python 按条件计算对象中的值

Python 按条件计算对象中的值,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个pandas.core.groupby.DataFrameGroupBy对象,我试图计算TOTAL\u FLOOR\u AREA值为>30的行数。我可以使用以下方法计算groupby对象中每个数据帧的行数: import numpy as np grouped = master_lsoa.groupby('lsoa11') grouped.aggregate(np.count_nonzero).TOTAL_FLOOR_AREA 但是,如果总楼层面积的值大于30,如何有条件地计算行数

我有一个
pandas.core.groupby.DataFrameGroupBy
对象,我试图计算
TOTAL\u FLOOR\u AREA
值为
>30的行数。我可以使用以下方法计算groupby对象中每个数据帧的行数:

import numpy as np

grouped = master_lsoa.groupby('lsoa11')

grouped.aggregate(np.count_nonzero).TOTAL_FLOOR_AREA
但是,如果
总楼层面积
的值大于30,如何有条件地计算行数

山姆

我想你需要:

np.random.seed(6)

N = 15
master_lso = pd.DataFrame({'lsoa11': np.random.randint(4, size=N),
                           'TOTAL_FLOOR_AREA': np.random.choice([0,30,40,50], size=N)})
master_lso['lsoa11'] = 'a' + master_lso['lsoa11'].astype(str)
print (master_lso)
    TOTAL_FLOOR_AREA lsoa11
0                 40     a2
1                 50     a1
2                 30     a3
3                  0     a0
4                 40     a2
5                  0     a1
6                 30     a3
7                  0     a2
8                 40     a0
9                  0     a2
10                 0     a1
11                50     a1
12                50     a3
13                40     a1
14                30     a1
首先按条件筛选行-分组前速度更快,因为行数更少

df = master_lso[master_lso['TOTAL_FLOOR_AREA'] > 30]
print (df)
    TOTAL_FLOOR_AREA lsoa11
0                 40     a2
1                 50     a1
4                 40     a2
8                 40     a0
11                50     a1
12                50     a3
13                40     a1
然后再加上:


您还可以构造一个新的列,指示满足条件的位置,并总结如下(窃取@jezrael的数据帧):

请注意,
True
值被解释为1。因此,总和在这里提供了相应的计数。
与@jezrael的解决方案相比,它的优势在于,您仍然可以计算每个组的总面积

我不知道如何将其返回给您;)
df1 = df.groupby('lsoa11')['TOTAL_FLOOR_AREA'].size().reset_index(name='Count')
print (df1)
  lsoa11  Count
0     a0      1
1     a1      3
2     a2      2
3     a3      1
master_lso.assign(Large_Enough= lambda x:x["TOTAL_FLOOR_AREA"]>30)\
    .groupby('lsoa11')["Large_Enough"].sum().reset_index()