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
相关产品推荐
相关产品推荐

