基于值关联两列:为Pandas多级索引DataFrame生成复合新列
解决方案
我们可以通过字符串分割拼接和索引提取来完成需求,具体操作如下:
- 生成
secondary-refid列:将refid按.分割,保留前两个部分后重新用.拼接 - 生成唯一ID列:把索引中的
ID-B值转为字符串,和secondary-refid用_拼接
完整代码
import pandas as pd # 原DataFrame构造代码 data = {'refid': ['1.2.34', '1.2.35', '1.3.66', '1.6.99', '1.9.00', '1.87.66', '1.98.00', '1.100.1', '1.101.3'], } my_index = pd.MultiIndex.from_arrays([["A"]*6 + ["B"]*3, [1, 1, 1, 2, 2, 2, 1, 1, 1]], names=["ID-A", "ID-B"]) df = pd.DataFrame(data, index=my_index) # 生成secondary-refid列:分割refid取前两部分并拼接 df['secondary-refid'] = df['refid'].str.split('.', n=2).str[:2].str.join('.') # 生成唯一ID列:拼接ID-B与secondary-refid df['唯一ID'] = df.index.get_level_values('ID-B').astype(str) + '_' + df['secondary-refid']
处理后结果示例
执行代码后,DataFrame会新增目标列,部分数据展示如下:
| ID-A | ID-B | refid | secondary-refid | 唯一ID |
|---|---|---|---|---|
| A | 1 | 1.2.34 | 1.2 | 1_1.2 |
| A | 1 | 1.2.35 | 1.2 | 1_1.2 |
| A | 2 | 1.6.99 | 1.6 | 2_1.6 |
| B | 1 | 1.100.1 | 1.100 | 1_1.100 |
内容的提问来源于stack exchange,提问作者MemeFast King
相关产品推荐
相关产品推荐

