簡體   English   中英

如何更改 Pandas 中的 MultiIndex Dataframe 列中某些行的值

[英]How to change the values of certain rowns in a column of a MultiIndex Dataframe in Pandas

我有一個 dataframe (df) 與以下列:

print(df.columns)
['A','B','C','D','E']

讓我們假設所有列都有數字作為數據。

然后我把select的一些列變成索引

Index = ['A','B','C']
df.set_index(Index).sort_index()

我用這種方式進行一些分析。在某些時候,當索引'C'具有某些值時,我需要更改列'E'的行,例如:

df.loc[df[(slice(None,None),slice(None,None),slice(5,10))], 'E' ] = 6

這顯然是行不通的。 我嘗試了很多不同的方法:使用元組和切片作為索引,如上一行所示,重新排列索引以便我可以使用單個切片(將“C”移動到第一級),嘗試使用.xs (橫截面)等,我做不到。 (我一直在研究 .loc、.xs 等的文檔)我沒有找到完全做到這一點的示例,也沒有找到不可能的結論性答案。 現在我能夠做到以下幾點:

df.reset_index(inplace=True) # returning it back into a normal DataFrame
df.loc[(DataFrame['C'] >= 5) & (df['C'] <= 10),'E'] = 6 # Modifying normally based on column data
df.set_index(Index).sort_index() # bring it back to a multiindex

但這似乎不對。 在我看來,索引應該能夠以某種方式被切片,我只是找不到方法。 也許我沒有在 Google 上搜索正確的術語。 如果有人能幫我一把或指出我正確的方向,我將不勝感激。

您可以使用df.index.get_level_values('C') - 它返回值的索引數組 - 如下所示。

import pandas as pd

df = pd.DataFrame(np.random.randint(0,10,size=(100, 5)), columns=list('ABCDE'))
df = df.set_index(['A','B','C']).sort_index()

df.loc[(df.index.get_level_values('C') <= 10) & (df.index.get_level_values('C') >= 5), 'E'] = 6

print(df)

結果:

       D  E                                              
A B C                                                    
0 0 6  3  6                                              
  2 0  6  1                                              
    7  2  6                                              
  3 6  5  6                                              
    9  1  6                                              
...   .. ..                                              
9 3 3  5  0                                              
    6  6  6                                              
  4 3  5  7                                              
    7  6  6                                              
  6 8  6  6             

注意:兩個.get_level_values()的括號都是必需的,否則答案會模棱兩可並且會引發錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM