是否可以在 pandas 数据框中有多个索引?
Posted
技术标签:
【中文标题】是否可以在 pandas 数据框中有多个索引?【英文标题】:Is it possible to have multiple indexes into a pandas dataframe? 【发布时间】:2020-12-30 02:24:23 【问题描述】:单个 pandas DataFrame 是否可以同时拥有多个索引?
我所说的索引是指类似于 SQL 数据库或 MongoDB 必须大幅提高某些查询的性能的东西。
假设您有一个订单数据框,有时您希望通过其 ID 对订单进行索引,而有时您希望通过另一个键(例如仓库、客户 ID、时间等)对订单进行索引。
【问题讨论】:
是的,您可以使用 MultiIndex 并使用 IndexSlice 进行查询。或者您可以像df.query('ClientID=10')
或布尔索引一样查询:df[df['ClientID']==10]
【参考方案1】:
简短回答:是的。
请参考https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.set_index.html
s = pd.Series([1, 2, 3, 4])
df.set_index([s, s**2])
month year sale
1 1 1 2012 55
2 4 4 2014 40
3 9 7 2013 84
4 16 10 2014 31
多索引的另一个例子:
dct = 'id' : (0,0,1,1,2,2,3,3,4,4,5,5),
'Store': ('A','A','A','A','A','A','B','B','B','C','C','C'),
'code_num':('INC101','INC102','INC103','INC104','INC105','INC106','INC201','INC202','INC203','INC301','INC302','INC303'),
'days':('4','18','9','15','3','6','10','5','3','1','8','5'),
'products': ('remote','antenna','remote,antenna','TV','display','TV','display,touchpad','speaker','Cell','display','speaker','antenna')
df = pd.DataFrame(dct)
df.set_index(['id','Store','code_num'])
df :
【讨论】:
是否可以将第二个索引设为 MultiIndex? 您的问题是:单个 pandas DataFrame 是否可以同时拥有多个索引? 是的,但是如果我希望能够使用我在帖子中描述的两种不同方式进行索引,其中第一种方式需要一个只有一个项目(订单 ID)的键,而第二种方式需要一个复合键(仓库 + 客户 ID + 时间)),我需要有两个索引,其中第一个是常规索引,而第二个是 MultiIndex。现在有意义吗? 更新了示例 这两个例子都创建了 MultiIndex,但问题是关于拥有独立的索引以上是关于是否可以在 pandas 数据框中有多个索引?的主要内容,如果未能解决你的问题,请参考以下文章