我正在使用pandas具有多索引列(兩個級別)的資料框。我需要從級別 0 中洗掉一列,然后獲取級別 = 0 中剩余列的串列。奇怪的是,丟棄部分作業正常,但是如果你呼叫df.columns.levels[0].
這是一個MRE。當我打電話時df.columns,結果是這樣的:
MultiIndex([('Week2', 'Hours'), ('Week2', 'Sales')], )
看起來肯定Week1已經消失了。但如果我打電話df.columns.levels[0].tolist()...
['第 1 周','第 2 周']
這是完整的代碼:
import pandas as pd
import numpy as np
n = ['Mickey', 'Minnie', 'Snow White', 'Donald',
'Goofy', 'Elsa', 'Pluto', 'Daisy', 'Mad Hatter']
df1 = pd.DataFrame(data={'Hours': [32, 30, 34, 33, 22, 12, 19, 17, 9],
'Sales': [10, 15, 12, 15, 6, 11, 9, 7, 4]},
index=n)
df2 = pd.DataFrame(data={'Hours': [40, 33, 29, 31, 17, 22, 13, 16, 12],
'Sales': [12, 14, 8, 16, 3, 12, 5, 6, 4]},
index=n)
df1.columns = pd.MultiIndex.from_product([['Week1'], df1.columns])
df2.columns = pd.MultiIndex.from_product([['Week2'], df2.columns])
df = pd.concat([df1, df2], axis=1)
#I want to remove a whole level
df = df.drop('Week1', axis=1, level=0)
print(df.columns) #Seems successful after this print, only Week 2 is left
print(df.columns.levels[0].tolist()) #This list includes Week1!
uj5u.com熱心網友回復:
使用remove_unused_levels:
從檔案中:
未使用的級別是指未在標簽中表示的級別。生成的 MultiIndex 將具有相同的外觀,即相同的 .values 和排序。它也將是原始的 .equals() 。
df.columns = df.columns.remove_unused_levels()
print(df.columns.levels)
# Output
[['Week2'], ['Hours', 'Sales']]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/428701.html
上一篇:如何在不使用for回圈的情況下更改某些特定行的單元格值?蟒蛇熊貓
下一篇:保持其他列不變
