【问题标题】:Is there a way to select a column that is an index in pandas?有没有办法选择作为熊猫索引的列?
【发布时间】:2017-04-28 03:09:15
【问题描述】:

我有一个 df,其中包含 NameAgeHeight 字段。

做完之后:

df.set_index('Name')

我不能再执行访问该列的操作,例如:

len(df['Name'])

直到我做一个:

df.reset_index()

有没有更好的方法可以在不设置和重置索引的情况下做到这一点

【问题讨论】:

    标签: pandas dataframe


    【解决方案1】:

    我想你可以通过以下方式选择index

    df.index
    

    get_level_values 用于MultiIndex,但也适用于index

    #select by position
    df.index.get_level_values(0)
    #select by name of level
    df.index.get_level_values('Name')
    

    所以你可以使用:

    len(df.index)
    

    示例:

    df = pd.DataFrame({'Name':['John','Joe','Sue'],
                       'Age':[40,50,60],
                       'Height':[180,175,155]})
    
    print (df)
       Age  Height  Name
    0   40     180  John
    1   50     175   Joe
    2   60     155   Sue
    
    df = df.set_index('Name')
    
    print (df.index)
    Index(['John', 'Joe', 'Sue'], dtype='object', name='Name')
    
    print (df.index.get_level_values(0))
    Index(['John', 'Joe', 'Sue'], dtype='object', name='Name')
    
    print (df.index.get_level_values('Name'))
    Index(['John', 'Joe', 'Sue'], dtype='object', name='Name')
    
    print (len(df.index))
    3
    

    【讨论】:

    • 其实我的问题比这复杂一点。我正在尝试做类似 groups = df.groupby(level=['Name', 'Field2'])['Name'].agg({'Count':'count'}) 但我无法访问agg 调用之前的“名称”
    • 是的,比较复杂。你能解释一下索引级别Name需要做什么吗?
    • 可能需要 applygroups = df.groupby(level=['Name', 'Field2']).apply(f) 这样的自定义函数,其中可以使用级别 Name - def f(x): print (x) name = sum(x.index.get_level_values('Name')) return pd.Series([name, x['Count'].count()], index=['Name', 'Count'])
    • 我要解决的原始问题在这里:stackoverflow.com/questions/41114831/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 2018-05-05
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    相关资源
    最近更新 更多