如何在Pandas中创建多对一索引,使多键指向同一列?
给Pandas列设置多个别名(多对一索引)
嘿,我完全懂你的需求——你想要给同一列数据设置多个“别名”,不管用df['A']还是df['B']都能拿到一模一样的结果,甚至修改其中一个的时候另一个也同步变化,而不是像MultiIndex那样搞出来多层级的列结构对吧?
其实实现这个很简单,不用复杂的操作,有两种常用方法:
方法1:直接赋值列别名(共享数据)
你可以直接把已有的列赋值给新的列名,这样两个列名会指向同一底层数据块,修改其中一个,另一个也会跟着变:
import pandas as pd import numpy as np # 创建原始数据 df = pd.DataFrame({'A': np.arange(9)}) # 给列A设置别名B df['B'] = df['A'] # 测试访问 print(df['A']) print(df['B']) # 和df['A']输出完全一致 # 测试修改同步 df['A'][0] = 999 print(df['B'][0]) # 输出999,说明数据是同步的
方法2:批量设置多个别名
如果需要给同一列设置多个别名,还可以通过concat快速生成共享数据的多列,再自定义别名:
import pandas as pd import numpy as np # 创建原始数据 df = pd.DataFrame({'A': np.arange(9)}) # 复制同一列多次,共享底层数据 df = pd.concat([df['A']]*3, axis=1) # 给各列设置不同别名 df.columns = ['A', 'B', 'C'] # 验证是否为同一对象 print(df['A'] is df['B']) # 输出True,说明指向同一数据块
为什么你的示例是MultiIndex?
你之前写的代码创建的是多层级列索引(MultiIndex),这是把列分成了上下两层,('A','A')和('A','B')是两个独立的列,和你想要的“多对一指向同一列”完全不是一回事,所以才不符合需求。
总结一下,最直接的方式就是用方法1,给已有列直接赋值新的列名,就能轻松实现多个键指向同一列的效果啦!
内容的提问来源于stack exchange,提问作者Nima Mousavi
相关产品推荐
相关产品推荐

