Python DataFrame按personId计算相对频率的实现方法
按personId计算True标签相对频率的实现
核心思路
利用True等价于数值1、False等价于0的特性,先将label列的NaN填充为False(视为0),再对分组后的label列取均值,得到的结果就是count(True)/(count(True)+count(False)),即目标的relative_frequency。
简洁实现代码
import pandas as pd # 示例数据 data = { 'date': ['2022-07-20', '2022-07-30', '2022-08-05', '2022-09-11'], 'personId': [1023, 1023, 1023, 1001], 'label': [False, False, True, False] } df = pd.DataFrame(data) # 处理NaN并计算相对频率 relative_freq = df.groupby('personId')['label'].apply(lambda x: x.fillna(False).mean()).rename('relative_frequency') # 输出结果 print(relative_freq)
结果说明
- personId=1023:1个True,共3条数据,结果为
1/3≈0.333 - personId=1001:0个True,共1条数据,结果为
0 - 若某personId的label全为NaN,填充后全为False,结果为0;若全为True,结果为1,完全符合需求。
内容的提问来源于stack exchange,提问作者Sue
相关产品推荐
相关产品推荐

