多条件分组计数问题:筛选指定TypeT后按SourceLoc和DestLoc统计
问题与解决方法
原始数据
原始DataFrame tran 如下:
SourceLoc DestLoc SourceEq DestEq TypeT Loc1 Loc1 Eq1 Eq2 Make Loc1 Loc2 Eq1 Eq1 Transfer Loc1 Loc3 Eq2 Eq2 Transfer Vend Loc2 Eq1 Eq1 Buy Loc2 Loc3 Eq1 Eq2 MakeTransfer Loc2 Loc3 Eq2 Eq2 Transfer
需求
- 仅统计
TypeT字段为Transfer或MakeTransfer的行; - 按
SourceLoc和DestLoc分组,统计每组的行数,最终得到包含count列的新DataFrame。
现有问题
当前代码未添加筛选条件,直接分组统计了所有行:
tran=tran.groupby(['SourceLoc','DestLoc']).size().reset_index().rename(columns={0:'count'})
修正后的代码
只需在分组前添加筛选逻辑,用布尔索引过滤符合条件的行即可:
# 先筛选TypeT符合要求的行,再分组统计 tran = tran[tran['TypeT'].isin(['Transfer', 'MakeTransfer'])].groupby(['SourceLoc','DestLoc']).size().reset_index(name='count')
说明:
tran['TypeT'].isin(['Transfer', 'MakeTransfer'])生成布尔索引,筛选出TypeT为指定值的行;- 使用
reset_index(name='count')可以直接将统计结果的列命名为count,比原代码的rename更简洁。
预期结果
执行修正后的代码后,得到的DataFrame如下:
SourceLoc DestLoc count Loc1 Loc2 1 Loc1 Loc3 1 Loc2 Loc3 2
内容的提问来源于stack exchange,提问作者Toly
相关产品推荐
相关产品推荐

