【发布时间】:2017-04-28 03:09:15
【问题描述】:
我有一个 df,其中包含 Name、Age、Height 字段。
做完之后:
df.set_index('Name')
我不能再执行访问该列的操作,例如:
len(df['Name'])
直到我做一个:
df.reset_index()
有没有更好的方法可以在不设置和重置索引的情况下做到这一点
【问题讨论】:
我有一个 df,其中包含 Name、Age、Height 字段。
做完之后:
df.set_index('Name')
我不能再执行访问该列的操作,例如:
len(df['Name'])
直到我做一个:
df.reset_index()
有没有更好的方法可以在不设置和重置索引的情况下做到这一点
【问题讨论】:
我想你可以通过以下方式选择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
【讨论】:
Name需要做什么吗?
apply 和 groups = 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'])