我知道熊猫提供了:
.ix
- 混合标签和位置索引(主要是标签),如果索引是整数 - 它将被解释为标签.loc
- 按标签显式索引.iloc
- 按位置显式索引那很酷。
通过标签(ala .loc
)和按行位置(ala .iloc
)一次索引列的正确方法是什么,以避免链式分配?优选地,它将避免reset_index()
。
提供一个示例,假设以下DataFrame df
:
col1 col2 col3
3 1 4 2
2 2 3 3
4 3 2 1
1 4 1 4
pandas是否有类似some_indexer
的内容,其行为如下?
In[2]: df.some_indexer[2,'col2':'col3']
Out[2]:
col2 2
col3 1
Name: 4, dtype: object
谢谢!
答案 0 :(得分:4)
我知道这是一个老问题,但这确实可以在没有链式索引或使用reset_index()
的情况下完成。您只需在df.index[2]
索引器中使用.loc
。
df.loc[df.index[2],'col2':'col3']
这也适用于作业。
答案 1 :(得分:1)
通常我们会df.ix[2, 'col2':'col3']
,但由于你的索引不明确,你会得到第二行而不是第三行,因为2
在位置1的索引中显示为值,因此标签选择成功为{ {1}}首先尝试标签选择,然后尝试位置选择。
来自文档:
.ix支持基于混合整数和标签的访问。它主要是 基于标签,但将回退到整数位置访问,除非 相应的轴是整数类型。 .ix是最通用的 将支持.loc和.iloc中的任何输入。 .ix也支持 浮点标签计划。 .ix在交易时特别有用 基于位置和标签的混合分层指数。
ix
以下方法可行,但这是链式调用,并且分配可能会在副本上运行并发出警告:
In [246]:
df.ix[2,'col2':'col3']
Out[246]:
col2 3
col3 3
Name: 2, dtype: int64
最简单的方法是重置索引,然后你可以调用In [247]:
df.iloc[2][['col2','col3']]
Out[247]:
col2 2
col3 1
Name: 4, dtype: int64
,我们必须再次删除索引,因为它是作为列插入的:
ix