在Python Pandas中执行类似Excel的countif和countifs操作可以使用Pandas数据处理功能中的条件筛选和统计方法,主要包括以下两种方法:
- 使用布尔索引筛选出符合条件的子集,然后使用len()函数或count()方法计算子集中的行数。
例如,我们有一个包含学生姓名、性别和分数的DataFrame,我们想要统计分数大于80分的男生人数,代码如下:
import pandas as pd
# 创建DataFrame
data = {'Name':['张三', '李四', '王五', '赵六', '小明'],
'Gender':['男', '男', '女', '男', '男'],
'Score':[75, 90, 83, 78, 95]}
df = pd.DataFrame(data)
# 筛选出符合条件的子集
subset = df[(df['Gender']=='男') & (df['Score']>80)]
# 统计子集中的行数
count = len(subset)
print(count)
上述代码中,我们使用布尔索引筛选出符合条件的子集,subset变量是一个DataFrame对象,包含所有符合条件的行。然后,我们使用Python内置的len()函数计算子集中的行数,得到男生中分数大于80分的人数。
- 使用groupby()方法和agg()方法进行分组统计。
如果我们需要对DataFrame中的某列数据进行分组统计,可以使用groupby()方法将数据按照指定列分组,然后使用agg()方法对分组后的数据进行聚合计算,统计符合条件的行数。
例如,我们有一个包含学生姓名、性别、年龄和分数的DataFrame,我们想要统计每个性别中分数大于80分的人数,代码如下:
import pandas as pd
# 创建DataFrame
data = {'Name':['张三', '李四', '王五', '赵六', '小明'],
'Gender':['男', '男', '女', '男', '男'],
'Age':[18, 19, 18, 17, 20],
'Score':[75, 90, 83, 78, 95]}
df = pd.DataFrame(data)
# 按照Gender列进行分组,然后对Score列进行聚合计算
result = df.groupby('Gender')['Score'].agg(lambda x: sum(x>80))
print(result)
上述代码中,我们使用groupby()方法将数据按照Gender列分组,然后使用agg()方法对分组后的数据进行聚合计算,其中lambda表达式表示计算分数大于80分的行数。运行结果如下:
Gender
女 1
男 2
Name: Score, dtype: int64
上述结果表示,女生中分数大于80分的人数是1个,男生中分数大于80分的人数是2个。
如果我们需要统计多个条件同时满足的行数,可以使用布尔运算符"&"(和运算)和"|"(或运算)连接条件,例如:
# 统计年龄大于18岁且分数大于80分的男生人数
subset = df[(df['Gender']=='男') & (df['Age']>18) & (df['Score']>80)]
count = len(subset)
# 统计年龄大于18岁或分数大于80分的人数
subset = df[(df['Age']>18) | (df['Score']>80)]
count = len(subset)
参考资料:
Pandas官方文档:https://pandas.pydata.org/docs/index.html
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在Python Pandas中执行类似Excel的counttifs操作 - Python技术站