如何为DataFrame中每个purchaseId添加含age值的行
为每个purchaseId添加age行的实现方法
要实现给每个purchaseId对应组添加一行(item列填入该组的age值),可以用以下两种简洁的pandas方法:
方法一:去重+合并法
- 提取每个
purchaseId的唯一记录(同一组的age值一致,只需保留一行即可) - 将提取出的记录的
item列替换为age的字符串值(和原item列类型保持一致) - 合并原始数据和新增行,再按
purchaseId排序保证组内顺序统一
import pandas as pd # 原始数据示例 df = pd.DataFrame({ 'purchaseId': [22,22,22,53,53,53], 'item': ['apples','coffee','wipes','tomatoes','sugar','tea'], 'age': [35,35,35,23,23,23] }) # 生成需要添加的行 add_rows = df.drop_duplicates('purchaseId').assign(item=lambda x: x['age'].astype(str)) # 合并并整理结果 df2 = pd.concat([df, add_rows]).sort_values('purchaseId').reset_index(drop=True)
方法二:分组生成法
通过分组遍历每个purchaseId组,直接生成对应的新增行,再合并到原数据:
import pandas as pd # 原始数据示例 df = pd.DataFrame({ 'purchaseId': [22,22,22,53,53,53], 'item': ['apples','coffee','wipes','tomatoes','sugar','tea'], 'age': [35,35,35,23,23,23] }) # 分组生成新增行 add_rows = df.groupby('purchaseId').apply( lambda g: pd.Series({ 'purchaseId': g['purchaseId'].iloc[0], 'item': str(g['age'].iloc[0]), 'age': g['age'].iloc[0] }) ).reset_index(drop=True) # 合并得到最终结果 df2 = pd.concat([df, add_rows]).sort_values('purchaseId').reset_index(drop=True)
两种方法最终都会得到你需要的df2结构。
内容的提问来源于stack exchange,提问作者NickA
相关产品推荐
相关产品推荐

