如何在Python Pandas中按method名称追加MultiIndex DataFrame列?
如何循环追加Pandas MultiIndex DataFrame并按指定索引排序
我明白你的需求是给现有的MultiIndex DataFrame添加另一组列,并且最终让列按照method这个字符串元组排序,实现多组列并排的效果。咱们一步步来解决这个问题:
1. 先明确你的DataFrame结构
你当前创建df1的代码是这样的:
method = tuple([TestAa, TestAb]) columns = [[method]*3,["level", "l", "r"]] tuples = list(zip(*columns)) index = pd.MultiIndex.from_tuples(tuples, names=['method', 'properties']) df1= pd.DataFrame(columns=index, data=data, dtype=np.float)
这里的列是双层索引:第一层是method元组,第二层是具体属性(level、l、r)。
2. 追加新DataFrame的正确方式
要实现你期望的列并排效果,不能用普通的append(它是行方向追加),而是要用pd.concat()函数沿着列的方向(axis=1)拼接。
假设你已经用同样的方式创建了df2(它的列索引第一层是(TestBa, TestBb)),拼接代码如下:
# 沿列方向拼接两个DataFrame combined_df = pd.concat([df1, df2], axis=1)
3. 按method排序列
拼接完成后,你需要对列的第一层索引(method)进行排序,让列组按照你想要的顺序排列:
# 对列的MultiIndex按「method」层级排序 combined_df = combined_df.sort_index(axis=1, level='method')
这样处理后,列就会按照method元组的顺序排列,呈现出你期望的(TestAa, TestAb)列组在前、(TestBa, TestBb)列组在后的效果。
4. 循环中批量追加的处理
如果是在循环里多次追加不同的列组,你可以先初始化一个空DataFrame,然后每次循环把新生成的DataFrame拼接到上面:
# 初始化空的最终DataFrame final_df = pd.DataFrame() # 示例循环:假设你有多个method元组需要处理 method_list = [(TestAa, TestAb), (TestBa, TestBb), (TestCa, TestCb)] for method_tuple in method_list: # 生成当前method对应的DataFrame columns = [[method_tuple]*3, ["level", "l", "r"]] tuples = list(zip(*columns)) index = pd.MultiIndex.from_tuples(tuples, names=['method', 'properties']) current_df = pd.DataFrame(columns=index, data=data, dtype=np.float) # 拼接到最终DataFrame final_df = pd.concat([final_df, current_df], axis=1) # 最后对列按method排序 final_df = final_df.sort_index(axis=1, level='method')
验证最终结果
这样处理后,你的最终DataFrame结构会和你期望的一致:
method (TestAa, TestAb) (TestBa, TestBb) properties level l r level l r 0 0.0 144.6 161.4 0.0 150.6 161.4 1 0.1 146.3 161.4 0.1 151.3 161.4 2 0.2 148.0 161.4 0.2 152.0 161.4 3 0.3 149.7 161.4 0.3 153.7 161.4 4 0.4 151.3 161.4 0.4 155.3 161.4
需要注意:确保每个要拼接的DataFrame的行索引完全一致,这样拼接时才能正确对齐行数据。
内容的提问来源于stack exchange,提问作者zeniapy
相关产品推荐
相关产品推荐

