Pandas统计列值在另一列中出现次数的方法(等效Excel COUNTIF)
Pandas实现Excel COUNTIF功能统计列值出现次数
现有如下结构的Pandas DataFrame:
import pandas as pd simple = pd.DataFrame([ (80,100 ), (100,90 ), (80, 90 ), ], columns=['content_x', 'content_y'])
原始数据结构:
| content_x | content_y | |
|---|---|---|
| 0 | 80 | 100 |
| 1 | 100 | 90 |
| 2 | 80 | 90 |
需求为统计content_x列每个取值在content_y列中的总出现次数,功能等效Excel的COUNTIF函数,可通过以下两种方案实现:
方案1:value_counts + map(大数据量下性能更优)
先统计content_y列所有值的出现频次,再将content_x的每个值映射到对应频次,content_y中不存在的取值默认填充0:
# 统计content_y各值出现次数 y_count = simple['content_y'].value_counts() # 映射生成结果列 simple['countif_result'] = simple['content_x'].map(y_count).fillna(0).astype('int')
方案2:apply逐行判断(写法更直观,适合小数据量)
直接对每个content_x取值,遍历content_y统计匹配次数:
simple['countif_result'] = simple['content_x'].apply(lambda x: (simple['content_y'] == x).sum())
最终输出效果:
| content_x | content_y | countif_result | |
|---|---|---|---|
| 0 | 80 | 100 | 0 |
| 1 | 100 | 90 | 1 |
| 2 | 80 | 90 | 0 |
内容的提问来源于stack exchange,提问作者ZakS
相关产品推荐
相关产品推荐

