如何用Pandas计算指定行中位数替换DataFrame目标行数值?
解决方法:替换3开头周几的%dict值为对应周1、周2的中位数
思路
先拆分wk&day列分离出周数和星期,再按星期分组计算第1、2周数据的中位数,最后将第3周对应星期的%dict值替换为该中位数。
完整代码
import pandas as pd # 构造示例DataFrame(对应你提供的表格数据) data = { 'wk&day': ['1Friday', '1Monday', '1Saturday', '1Sunday', '1Thursday', '1Tuesday', '1Wednesday', '2Friday', '2Monday', '2Saturday', '2Sunday', '2Thursday', '2Tuesday', '2Wednesday', '3Friday', '3Monday', '3Saturday', '3Sunday', '3Thursday', '3Tuesday', '3Wednesday'], '%dict': [6, 6, 1.7, 1.698750, 6.538169, 7.117872, 6.545507, 2.3775163, 2.843480, 1.918890, 1.7391091, 2.5646356, 2.7847760, 2.7921140, 2.8728322, 2.7994520, 2.2601081, 1.7170951, 2.8581562, 2.8838392, 2.6526918] } df = pd.DataFrame(data) # 拆分wk&day列,提取周数和星期 df[['week', 'day']] = df['wk&day'].str.extract(r'(\d+)([A-Za-z]+)') df['week'] = df['week'].astype(int) # 计算每个星期对应第1、2周的中位数 day_median_map = df[df['week'].isin([1, 2])].groupby('day')['%dict'].median() # 替换第3周的%dict值 df.loc[df['week'] == 3, '%dict'] = df.loc[df['week'] == 3, 'day'].map(day_median_map) # 移除临时生成的week和day列,恢复原结构 df = df.drop(columns=['week', 'day']) # 查看结果 print(df)
结果说明
执行后,第3周各星期的%dict值会被替换为对应星期第1、2周数据的中位数:
- 3Monday → (6 + 2.843480)/2 = 4.42174
- 3Friday → (6 + 2.3775163)/2 = 4.18875815
- 以此类推其他星期
内容的提问来源于stack exchange,提问作者Abinash Mohanty
相关产品推荐
相关产品推荐

