如何在Pandas多级索引DataFrame中直接添加新行
给多级索引DataFrame添加新行(不重置索引)
嘿,我来帮你搞定这个问题!要在不破坏原有多级索引结构的前提下添加新行,最稳妥且兼容新版pandas的方式是用pd.concat(),毕竟append()已经被官方标记为弃用啦。下面给你两种可行的实现方法:
方法1:使用pd.concat()(推荐,适配所有新版pandas)
核心思路是先构造一个和原DataFrame结构完全匹配的单行多级索引DataFrame,再将它与原表拼接:
import pandas as pd # 还原你的原多级索引DataFrame df = pd.DataFrame({'a':[1,2,3,4,5],'b':[100,200,300,400,500],'c':['a','b','j','e','q']}) df = df.set_index(['a','b']) # 你的新数据变量 a1 = 7 b1 = 700 c1 = 'z' # 构造单行的多级索引DataFrame new_row_df = pd.DataFrame( {'c': [c1]}, index=pd.MultiIndex.from_tuples([(a1, b1)], names=['a', 'b']) ) # 拼接两个DataFrame,保留多级索引 df = pd.concat([df, new_row_df])
执行后得到的最终结果如下,完美保留了原有的多级索引:
c a b 1 100 a 2 200 b 3 300 j 4 400 e 5 500 q 7 700 z
方法2:使用append()(仅适用于pandas 2.0以下版本)
如果你的pandas版本比较旧,也可以用append()快速实现,但官方已弃用该方法,不推荐长期使用:
# 构造带多级索引名称的Series new_row_series = pd.Series({'c': c1}, name=(a1, b1)) # 添加到原DataFrame df = df.append(new_row_series)
两种方法都不需要重置索引再重建,完全符合你的需求~
内容的提问来源于stack exchange,提问作者Shubham R
相关产品推荐
相关产品推荐

