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 基于多索引级别的主要内容,如果未能解决你的问题,请参考以下文章
根据级别 0 索引对多索引 Pandas DataFrame 的级别 1 索引进行自定义排序