如何修改Pandas分组数据并还原为原DataFrame?
Pandas分组修改数据不生效?看这解决方法
问题根源
你循环里拿到的val是原DataFrame的副本,不是对原数据的引用。修改副本的内容不会同步回原df,所以后续查看分组数据时没有变化。
正确实现:用groupby.apply()
apply()会遍历每个分组,把修改后的分组返回,最后自动合并成完整的DataFrame,完美适配你按不同分组自定义填充的需求。
完整代码示例
import pandas as pd import numpy as np d = {'car' : ["Audi", "Audi", "Audi", "BMW", "BMW", "BMW", "FIAT", "FIAT", "FIAT", "FIAT"], 'year' : [2000, 2001, 1995, 1992, 2003, 2003, 2011, 1982, 1997, 2002]} df = pd.DataFrame.from_dict(d) df['new'] = np.nan def process_group(group): key = group['car'].iloc[0] # 获取当前分组的车型名称 if key == 'Audi': group.loc[group['year'] < 2000, 'new'] = f'new {key}' elif key == 'BMW': # 这里写BMW的自定义逻辑,示例:给年份小于2000的行赋值 group.loc[group['year'] < 2000, 'new'] = 'BMW classic' elif key == 'FIAT': # FIAT的自定义逻辑,示例:给所有行的new列赋值年份+10 group['new'] = group['year'] + 10 else: group.loc[group['year'] < 2000, 'new'] = 'UNKNOWN' return group # 应用分组处理函数,group_keys=False避免多余的分组索引 df_processed = df.groupby('car', group_keys=False).apply(process_group) print(df_processed)
代码说明
group_keys=False:保持原DataFrame的结构,不会额外添加分组索引列process_group函数:每个分组会传入该函数,你可以在内部根据分组key编写任意自定义逻辑,最后返回修改后的分组- 最终
df_processed就是所有分组处理完成后的完整DataFrame
验证效果
比如查看Audi分组的修改结果:
print(df_processed[df_processed['car'] == 'Audi'])
会看到1995年的行new列已被填充为new Audi,所有分组的自定义逻辑都已生效。
内容的提问来源于stack exchange,提问作者SeyoM
相关产品推荐
相关产品推荐

