我知道我们有按标签选择的方法loc[]
,iloc[]
按索引选择的方法。但是当我想从一个更改为另一个甚至混合它们时,我正在挣扎。
假设我们有动物的数据及其统计数据:
import pandas as pd
csv = [
['cat', 5, 2, 9],
['dog', 7, 8, 6],
['fish', 3, 1, 4]
]
df = pd.DataFrame(csv, columns=['animal', 'speed', 'strength', 'agility'])
df = df.set_index('animal')
现在我想知道狗的力量。我跑:
df.loc['dog','strength']
我得到了所需的输出。但是,如果现在我想知道哪些索引与此输出相关联,该怎么办?
而相反的情况。假设我知道索引并运行:
df.iloc[1][1]
但现在我想知道哪种动物和哪个统计数据与这个结果有关。
换句话说,如何知道"狗"是行 = 1,"强度"是列 = 1,反之亦然?
此外,如果我想组合标签和索引怎么办。在我的示例中,它将类似于"获取狗行的第二列"。我该怎么做?
谢谢。
我们可以使用get_indexer
i, j = df.index.get_indexer(['dog']),df.columns.get_indexer(['strength'])
i
Out[522]: array([1], dtype=int64)
j
Out[523]: array([1], dtype=int64)
df.iloc[i,j]
Out[528]:
strength
animal
dog 8
如果在括号中添加了索引/列标题,则将返回数据帧而不是标量值。 例如:
df.loc[['dog'],['strength']]
输出:
strength
animal
dog 8
或
df.iloc[[1],[1]]
输出:
strength
animal
dog 8