[英]Change Particular Column values in a 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.