【问题标题】:Finding label location in a DataFrame Index在 DataFrame 索引中查找标签位置
【发布时间】:2018-10-08 17:22:07
【问题描述】:

我有一个熊猫数据框:

import pandas as pnd
d = pnd.Timestamp('2013-01-01 16:00')
dates = pnd.bdate_range(start=d, end = d+pnd.DateOffset(days=10), normalize = False)

df = pnd.DataFrame(index=dates, columns=['a'])
df['a'] = 6

print(df)
                     a
2013-01-01 16:00:00  6
2013-01-02 16:00:00  6
2013-01-03 16:00:00  6
2013-01-04 16:00:00  6
2013-01-07 16:00:00  6
2013-01-08 16:00:00  6
2013-01-09 16:00:00  6
2013-01-10 16:00:00  6
2013-01-11 16:00:00  6

我有兴趣找到其中一个标签的标签位置,比如说,

ds = pnd.Timestamp('2013-01-02 16:00')

查看索引值,我知道是这个标签的整数位置 1。如何让pandas知道这个标签的整数值是什么?

【问题讨论】:

  • 顺便说一句,pandas 的传统别名是pd :)
  • 来到这里是因为我遇到了相反的问题:给定数据框df 中的整数位置,找到该位置的标签。折腾了一下,原来是这样:使用df.index[n]可以得到索引位置n的标签

标签: python pandas


【解决方案1】:

您正在寻找索引方法get_loc

In [11]: df.index.get_loc(ds)
Out[11]: 1

【讨论】:

【解决方案2】:

给定日期键获取数据帧整数索引:

>>> import pandas as pd

>>> df = pd.DataFrame(
    index=pd.date_range(pd.datetime(2008,1,1), pd.datetime(2008,1,5)),
    columns=("foo", "bar"))

>>> df["foo"] = [10,20,40,15,10]

>>> df["bar"] = [100,200,40,-50,-38]

>>> df
            foo  bar
2008-01-01   10  100
2008-01-02   20  200
2008-01-03   40   40
2008-01-04   15  -50
2008-01-05   10  -38

>>> df.index.get_loc(df["bar"].argmax())
1

>>> df.index.get_loc(df["foo"].argmax())
2

在栏目中,最大值的索引为1

在foo列中,最大值的索引是2

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Index.get_loc.html

【讨论】:

  • 请参阅 meta.stackexchange.com/questions/19190/… 重新编辑标题。
  • Google 对 stackoverflow 问题的标题进行大量排名,它对问题标题进行情感分析和词法分析,以优化给定查询的最佳答案。这是我所做的编辑。 stackoverflow.com/posts/17244049/revisions OP 将标签放在问题的末尾,我将它们移到了开头。我的命名风格通常是“在标签和标签中,我如何 X 所有的 Y?”这样,当您在 Google 上搜索“python pandas,我如何 X 所有的 Y?蓝色链接文本是您需要 100% 确认这具有您需要的内容。
  • 您可以提出标签集和标题文本重复单词的论点,但问题是标签没有突出显示。理想情况下,我认为最好的办法是将标签放在标题中,如果它们完全有用的话,只有在它造成损害时才被删除(就像你刚才所做的那样),在这种情况下它没有造成损害。尽量不要仅仅因为它们在标签集中重复就从标题中删除标签,简洁完整的标题对搜索引擎过程很重要。
【解决方案3】:

get_loc 可用于 rowscolumns,根据:

import pandas as pnd
d = pnd.Timestamp('2013-01-01 16:00')
dates = pnd.bdate_range(start=d, end = d+pnd.DateOffset(days=10), normalize = False)

df = pnd.DataFrame(index=dates)
df['a'] = 5
df['b'] = 6
print(df.head())    
                     a  b
2013-01-01 16:00:00  5  6
2013-01-02 16:00:00  5  6
2013-01-03 16:00:00  5  6
2013-01-04 16:00:00  5  6
2013-01-07 16:00:00  5  6

#for rows
print(df.index.get_loc('2013-01-01 16:00:00'))  
 0
#for columns
print(df.columns.get_loc('b'))
 1

【讨论】:

    猜你喜欢
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 2013-02-15
    • 2014-11-26
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多