我在pandas数据框中读过excel文件。我正在迭代索引列,将行的每个元素与某个值进行比较。当我找到匹配项时,我需要找到匹配项的列号。
示例:
df = pd.DataFrame({'A': [0, 0, 2, 1], 'B': [1,2,3,4], 'C' : [5,7,2,5]})
print df
A B C
0 0 1 5
1 0 2 7
2 2 3 2
3 1 4 5
如果我找到了元素3的匹配项,我应该可以打印' B'以及B的列号,即1。 怎么实现呢? 谢谢!
答案 0 :(得分:1)
我认为应该有多个匹配,因此可以使用any
过滤至少一个匹配,然后为所有index
获取s
True
并选择[]
的第一个值按列名称使用Index.get_loc
:
s = (df == 3).any()
print (s)
A False
B True
C False
dtype: bool
a = s.index[s]
print (a[0])
B
print (df.columns.get_loc(a[0]))
1
编辑:
df = pd.DataFrame({'A': [0, 0, 2, 1], 'B': [1,2,3,4], 'C' : [5,2,3,5]})
print (df)
A B C
0 0 1 5
1 0 2 2
2 2 3 3
3 1 4 5
s = (df == 3).any()
print (s)
A False
B True
C True
dtype: bool
a = s.index[s]
print (a)
Index(['B', 'C'], dtype='object')
print (df.columns.get_indexer(a))
[1 2]
答案 1 :(得分:1)
使用np.where
。它会为您提供所有匹配的行和相应的列位置
i, j = np.where(df.values == 3)
j
array([1])
如果您想要列标签
df.columns[j]
Index(['B'], dtype='object')
答案 2 :(得分:0)
for da in df.index.values:
for i,d in df.loc[data].items():
print i
此处i
将打印列号。