Python 将两列设置为Pandas中的元组索引

Python 将两列设置为Pandas中的元组索引,python,pandas,indexing,Python,Pandas,Indexing,假设我有一个包含列0、1和“未来连接”的熊猫数据帧。如何将列0和1设置为一个元组索引: 例如,此数据帧: 0 1 Future Connection 6 840 0.0 4 197 1.0 620 979 0.0 将导致: 0 Future Connection (6, 840) 0.0 (4, 197) 1.0 (620, 979) 0.0 将列表理解用于提取列0,1: print (df.colum

假设我有一个包含列0、1和“未来连接”的熊猫数据帧。如何将列0和1设置为一个元组索引:

例如,此数据帧:

0   1        Future Connection
6   840      0.0
4   197      1.0
620 979      0.0
将导致:

0           Future Connection
(6, 840)    0.0
(4, 197)    1.0
(620, 979)  0.0

将列表理解用于提取列
0,1

print (df.columns)
Index([0, 1, 'Future Connection'], dtype='object')

df.index = [x for x in zip(df.pop(0), df.pop(1))]
print (df)
            Future Connection
(6, 840)                  0.0
(4, 197)                  1.0
(620, 979)                0.0
如何将列0和1设置为一个元组索引:

“元组索引”作为一个概念在熊猫中并不存在。您可以有一个包含元组的
对象
dtype索引,但不建议这样做。最好的选择是使用
多索引
,它通过NumPy数组高效地存储基础值。事实上,熊猫通过以下方式促进了这一点:


为什么不使用jpp推荐的多级索引呢?这正是我想要的。但这正是我在Coursera学习的课程想要返回以获得一些分数的地方。@Nikko,你应该写信给Coursera,解释他们没有像应该教的那样教熊猫。这是对熊猫的典型误用。@jpp哈哈哈。主题是关于Python中的NetworkX。这两列是一组节点。然后将其传递给ML以预测未标记的“节点”集。在这种情况下,它预测了两名员工拥有“未来联系”的可能性。再次感谢!谢谢你的澄清。数据来自Coursera。我只是跟着走了。@Nikko,我一点也不奇怪,熊猫被滥用的方式有很多种。这只是其中之一。遗憾的是,这是一个过程。@jpp,或者任何想插话的人,我很高兴你们演示了多重索引,但我很好奇为什么使用元组索引是一种误用。缺点是什么?提前谢谢。@KalebCoberly,请参阅和对该答案的第一条评论,关于使用
object
dytpe的低效性。@jpp,谢谢。所以问题是多索引更有效,而不是将元组用于索引是错误的还是其他什么?只是效率不高?这是一个非常优雅的答案。我再次向耶斯雷尔学习。再次感谢你!你真是最棒的!
df = df.set_index([0, 1])

print(df)
#          Future Connection
# 0   1                     
# 6   840                0.0
# 4   197                1.0
# 620 979                0.0

print(df.index)
# MultiIndex(levels=[[4, 6, 620], [197, 840, 979]],
#            labels=[[1, 0, 2], [1, 0, 2]],
#            names=[0, 1])

print(df.index.values)
# [(6, 840) (4, 197) (620, 979)]