【发布时间】:2016-07-06 19:42:39
【问题描述】:
我有一个带有多索引的数据框。当满足第一个索引的某些条件时,我想更改第二个索引的值。 我在这里发现了一个类似(但不同)的问题:Replace a value in MultiIndex (pandas) 这没有回答我的观点,因为那是关于更改单行,并且解决方案也传递了第一个索引的值(不需要更改)。就我而言,我正在处理多行,但我无法使该解决方案适应我的情况。
我的数据的最小示例如下。谢谢!
import pandas as pd
import numpy as np
consdf=pd.DataFrame()
for mylocation in ['North','South']:
for scenario in np.arange(1,4):
df= pd.DataFrame()
df['mylocation'] = [mylocation]
df['scenario']= [scenario]
df['this'] = np.random.randint(10,100)
df['that'] = df['this'] * 2
df['something else'] = df['this'] * 3
consdf=pd.concat((consdf, df ), axis=0, ignore_index=True)
mypiv = consdf.pivot('mylocation','scenario').transpose()
level_list =['this','that']
# if level 0 is in level_list --> set level 1 to np.nan
mypiv.iloc[mypiv.index.get_level_values(0).isin(level_list)].index.set_levels([np.nan], level =1, inplace=True)
最后一行不起作用:我明白了:
ValueError: On level 1, label max (2) >= length of level (1). NOTE: this index is in an inconsistent state
【问题讨论】:
-
您可以选择重置索引还是保留它?
-
我想保留它。我可以重置它然后重新添加它吗?
-
你可以用
mypiv.loc[(level_list,)]代替mypiv.iloc[mypiv.index.get_level_values(0).isin(level_list)]。
标签: python pandas dataframe multi-index