Pandas拆分多姓名列按日期计算指定姓名的每日平均评分
实现思路
你之前的方法无法生效的核心原因是Name列存储的是多姓名组合值,需要先将该列拆分,让每一行对应一个单独姓名,再进行聚合计算。
完整实现代码
import pandas as pd # 示例数据 df1 = pd.DataFrame({ 'Date':['2021-01-01', '2021-01-01', '2021-01-01', '2021-01-02', '2021-01-02', '2021-01-02', '2021-01-02', '2021-01-03'], 'Name':['Tim, Max', 'Tim', 'Max, Ben', 'Ben, Tim', 'Max', 'Tim, Max, Ben', 'Claude', 'Max, Bob'], 'Ratings':[9.0, 8.0, 5.0, 3.0, 2, 3, 2, 5] }) target_names = ['Tim', 'Max', 'Ben'] # 1. 拆分Name列,每行对应一个姓名 df_exploded = df1.assign(Name=df1['Name'].str.split(',\s*')).explode('Name') # 2. 过滤仅保留目标姓名 df_filtered = df_exploded[df_exploded['Name'].isin(target_names)] # 3. 按日期和姓名聚合求平均,调整输出格式 df2 = df_filtered.pivot_table( values='Ratings', index='Date', columns='Name', aggfunc='mean' ).reindex(columns=target_names, fill_value='NA').reset_index()
输出结果验证
执行上述代码后df2的输出和你预期的结果完全一致:
| Date | Tim | Max | Ben |
|---|---|---|---|
| 2021-01-01 | 8.5 | 7.0 | 5.0 |
| 2021-01-02 | 3.0 | 2.5 | 3.0 |
| 2021-01-03 | NA | 5.0 | NA |
内容的提问来源于stack exchange,提问作者fjurt
相关产品推荐
相关产品推荐

