如何计算DataFrame中键值格式字符串列的key加权平均值?
解决方法
你可以通过自定义函数逐行处理value列的字符串,拆分出键值对后按规则计算平均值即可,完整实现代码如下:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'id': ['a', 'a', 'a'], 'value': [ '0:3,1:0,2:0,3:4', '0:0,1:0,2:2,3:0', '0:0,1:5,2:4,3:0' ] }) # 定义平均值计算函数 def calc_row_avg(value_str): sum_total = 0 count_total = 0 # 按逗号拆分每个键值对 for kv in value_str.split(','): key, cnt = kv.split(':') key = int(key) cnt = int(cnt) sum_total += key * cnt count_total += cnt # 避免除0错误,保留两位小数 return round(sum_total / count_total, 2) if count_total != 0 else 0 # 应用函数到value列 df['value'] = df['value'].apply(calc_row_avg) print(df)
输出结果
id value 0 a 1.71 1 a 2.00 2 a 1.44
注:你给出的期望结果中第二行的1.66应为笔误,按照你提供的计算规则,第二行
0:0,1:0,2:2,3:0的计算结果为2.00,若你需要的是其他聚合逻辑可调整计算函数。
内容的提问来源于stack exchange,提问作者skulldoger
相关产品推荐
相关产品推荐

