Pandas - 在整数轴上按位置正确索引,在另一轴上正确标记(以避免链接赋值)

时间:2015-02-24 15:21:33

标签: python pandas

我知道熊猫提供了:

  1. .ix - 混合标签和位置索引(主要是标签),如果索引是整数 - 它将被解释为标签
  2. .loc - 按标签显式索引
  3. .iloc - 按位置显式索引
  4. 那很酷。

    通过标签(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
    

    谢谢!

2 个答案:

答案 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