【问题标题】:How do I find the row # of a string index?如何找到字符串索引的第 # 行?
【发布时间】:2021-12-19 05:55:24
【问题描述】:

我有一个数据框,其中索引不是数字而是字符串(特别是国家名称),它们都是唯一的。给定一个国家/地区的名称,我如何找到它的行号(索引的“数字”值)?

我试过df[df.index == 'country_name'].index,但这不起作用。

【问题讨论】:

    标签: python pandas indexing


    【解决方案1】:

    pd.Index.get_indexer

    我们可以使用pd.Index.get_indexer来获取整数索引。

    idx = df.index.get_indexer(list_of_target_labels)
    # If you only have single label we can use tuple unpacking here.
    [idx] = df.index.get_indexer([country_name])
    

    注意: pd.Index.get_indexer 接受一个列表并返回一个列表。从 0 到 n - 1 的整数,表示这些位置的索引与相应的目标值匹配。目标中的缺失值用 -1 标记。

    np.where

    你也可以在这里使用np.where

    idx = np.where(df.index == country_name)[0]
    

    list.index

    在将Pd.Index 转换为使用pd.Index.tolist 的列表后,我们还可以使用list.index

    idx = df.index.tolist().index(country_name)
    

    【讨论】:

    • np.where 没有 x,y 是一个很好的方法!我没想到那个:-)
    • @HenryEcker 最初,我想使用np.argwhere,但它不用于索引,所以我继续使用np.where。虽然一维数组没关系。
    【解决方案2】:

    我们可以使用Index.get_indexer:

    df.index.get_indexer(['Peru'])
    
    [3]
    

    或者我们可以根据 DataFrame 的大小构建一个RangeIndex,然后将其作为子集:

    pd.RangeIndex(len(df))[df.index == 'Peru']
    
    Int64Index([3], dtype='int64')
    

    由于我们只寻找一个标签并且索引是“唯一的”,我们也可以使用Index.get_loc

    df.index.get_loc('Peru')
    
    3
    

    示例数据帧:

    import pandas as pd
    
    df = pd.DataFrame({
        'A': [1, 2, 3, 4, 5]
    }, index=['Bahamas', 'Cameroon', 'Ecuador', 'Peru', 'Japan'])
    

    df:

              A
    Bahamas   1
    Cameroon  2
    Ecuador   3
    Peru      4
    Japan     5
    

    【讨论】:

    • Index.get_loc 今天学到了一些新东西。 :)
    • 如果您要在唯一索引中搜索单个标签,这通常是最佳选择。 (尽管行为在非唯一索引上可能很奇怪)@Ch3steR
    【解决方案3】:

    为什么不使用数字而不是文本创建索引?因为您的 df 可以按字母顺序以外的多种方式进行排序,并且您可能会丢失行数。 使用编号索引,这不是问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-07
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 2020-06-08
      相关资源
      最近更新 更多