如何在Pandas DataFrame对应Label分组后追加新数据并维持分组顺序
如何将新数据追加到Pandas DataFrame对应Label分组的末尾?
我来帮你搞定这个需求!默认的append方法会把新数据放到整个DataFrame的最后,但你想要把新数据追加到对应Label分组的末尾、保持其他分组顺序不变,其实可以通过拆分原DataFrame再合并的方式实现,具体代码和步骤如下:
实现代码
import pandas as pd # 初始化原DataFrame df1 = pd.DataFrame( {"a":[1, 2, 3, 4, 1, 2,5,3], "b":[5, 6, 7, 8, 5, 6,6,2], "label":['A','A','A','B','B','B','C','C']} ) # 待追加的新数据 new_data = pd.DataFrame({"a":[3], "b":[4], "label":['A']}) # 获取新数据对应的目标Label target_label = new_data['label'].iloc[0] # 找到原DataFrame中该Label分组的最后一行索引 last_target_index = df1[df1['label'] == target_label].index[-1] # 拆分原数据并合并新数据到对应分组末尾 df1 = pd.concat([ df1.iloc[:last_target_index + 1], # 包含目标Label的所有行 new_data, # 待追加的新数据 df1.iloc[last_target_index + 1:] # 剩余的其他分组数据 ], ignore_index=True) # 查看结果 print(df1)
代码说明
- 定位目标分组:先获取新数据对应的Label值,再筛选出原DataFrame中该Label的所有行,取最后一行的索引——这就是我们要插入新数据的位置。
- 拆分与合并:把原DataFrame拆成三部分(目标Label及之前的行、新数据、目标Label之后的行),用
pd.concat按顺序合并这三部分,最后重置索引即可得到你期望的结果。
如果后续需要追加多个不同Label的新数据,你可以把这个逻辑封装成函数,循环处理每个Label的新数据即可。
内容的提问来源于stack exchange,提问作者Ghozally
相关产品推荐
相关产品推荐

