【发布时间】:2014-01-20 12:34:10
【问题描述】:
我有一个代表矩阵的数据框。它由行号和列号索引,类似于:
arrays = [[1,1,1,2,2,2,3,3,3],[1,2,3,1,2,3,1,2,3]]
tuples = zip(*arrays)
index = MultiIndex.from_tuples(tuples, names=['row', 'col'])
df = DataFrame([100,99,98,97,96,95,94,93,92],index,columns=['score'])
score
row col
1 1 100
2 99
3 98
2 1 97
2 96
3 95
3 1 94
2 93
3 92
现在我想弄清楚如何只选择第 1 行的第 1 列和第 3 列,这意味着一些将返回的代码:
score
row col
1 1 100
3 98
当然,我不是在寻找明确选择 1 和 3 的代码,而是在更一般的情况下,我将传递 0 级索引列表和 1 级索引列表,并返回适当的子集。
我试过了:
k1 = 1
k2 = [1,3]
df.ix[k1,k2]
这会引发错误。
这确实有效:
df.ix[k1].ix[k2]
但仅当 k1 是标量时。如果k1=[1,3] 没有检索到正确的子集,因为返回的数据帧仍然使用 0 级索引进行索引。
它看起来不像作者的意图。我看不出为什么df.ix[k1,k2](其中 k1 和 k2 是标量或向量或混合)不应该工作。我错过了什么吗?
【问题讨论】:
-
将矩阵表示为多索引 DataFrame 有点奇怪,您有什么用例?是为了表示稀疏矩阵吗?如果是这样,使用 scipy.sparse 不是更好吗?
-
嗯,它是一个索引矩阵。它不是我在这里展示的rows vs cols,而是人vs.人。例如,某些系统的“jacob green”上的“john smith”得分为 50。我想说的是我的索引是字符串而不是整数
标签: pandas