You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame索引匹配与多表合并保留列问题咨询

Pandas问题解决方案

问题1:给多索引DataFrame添加匹配中间索引的列

完全可以,直接通过索引的get_level_values方法提取中间层级的索引值,赋值为新列即可。假设你的3级索引依次是level0、level1(中间索引)、level2,示例代码如下:

import pandas as pd

# 构造一个3级索引的示例DataFrame
index = pd.MultiIndex.from_tuples(
    [('A', 'X', 1), ('A', 'X', 2), ('B', 'Y', 3), ('B', 'Y', 4)],
    names=['level0', 'level1', 'level2']
)
df = pd.DataFrame({'value': [10, 20, 30, 40]}, index=index)

# 添加列匹配中间索引level1
df['middle_index'] = df.index.get_level_values('level1')
# 或者用层级位置(中间索引是第2个,索引从0开始的话是1)
# df['middle_index'] = df.index.get_level_values(1)

print(df)

运行后会得到包含middle_index列的DataFrame,值完全匹配中间层级的索引。

问题2:合并两个DataFrame并保留transaction #列

核心是用merge时指定正确的关联键和合并方式,确保保留原DataFrame的transaction #列。假设你的First DF包含transaction #和name,Second DF包含name和net volume,用左连接(how='left')就能保留First DF的所有行及transaction #,同时匹配Second DF中对应name的net volume值。示例代码如下:

import pandas as pd

# 构造示例First DF
first_df = pd.DataFrame({
    'transaction #': [1001, 1002, 1003, 1004],
    'name': ['Alice', 'Bob', 'Alice', 'Charlie']
})

# 构造示例Second DF
second_df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Dave'],
    'net volume': [500, 300, 700]
})

# 基于name列合并,保留所有transaction #
third_df = pd.merge(first_df, second_df, on='name', how='left')

print(third_df)

这样得到的third_df会保留所有transaction #记录,对应name存在的行填充net volume,不存在的行则显示NaN,完全符合需求。

内容的提问来源于stack exchange,提问作者Matthew Allen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 12:45:42