pandas np.where 基于多索引级别

Posted

技术标签:

【中文标题】pandas np.where 基于多索引级别【英文标题】:pandas np.where based on mulitindex level 【发布时间】:2020-04-29 15:14:04 【问题描述】:

我有一个带有 MultiIndex 的数据框。这两个级别是“Nr”和“Price”。是否可以在索引级别 1(“价格”)上使用 np.where 来创建新列(“ZZ”)?

如果级别 1(“价格”)等于“x”,则“ZZ”应通过“第一”列乘以 2 来计算。

import pandas as pd
index = pd.MultiIndex.from_product([['s1', 's2','s3'],['x','y']])
df = pd.DataFrame([1,2,3,4,5,6],index, columns=['first'] )
df.index.names = ['Nr', 'Price']
df

我试过了:

df['ZZ'] = np.where(df['Price']=='x',df['0']*2,np.nan)

我得到:

谢谢!

【问题讨论】:

【参考方案1】:

你应该使用get_level_values

np.where(df.index.get_level_values(1)=='x', df['first']*2, np.nan)
array([ 2., nan,  6., nan, 10., nan])
#df['ZZ'] = np.where(df.index.get_level_values(1)=='x', df['first']*2, np.nan)

【讨论】:

以上是关于pandas np.where 基于多索引级别的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:将多索引级别作为系列

pandas 多索引切片“级别类型不匹配”

Pandas 从多索引级别获取所有值

根据级别 0 索引对多索引 Pandas DataFrame 的级别 1 索引进行自定义排序

Pandas - Groupby 多索引级别,获取可能的组合,然后转换数据

为每个级别对 Pandas 中的多索引进行不同的排序