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