我有以下代碼行
end_df['Soma Internet'] = end_df.iloc[:,end_df.columns.get_level_values(1) == 'Internet'].drop('site',axis=1).sum(axis=1)
基本上,它通過特定的 1 級列過濾我的多索引 df。洗掉一些不想要的列。并做所有其他的總和。
我看了看一些檔案和其他問題。但我不太明白是什么導致了警告,我也很想重寫這段代碼,所以我把它去掉了。
uj5u.com熱心網友回復:
讓我們嘗試一個示例(為簡單起見,沒有資料):
# Column MultiIndex.
idx = pd.MultiIndex(levels=[['Col1', 'Col2', 'Col3'], ['subcol1', 'subcol2']],
codes=[[2, 1, 0], [0, 1, 1]])
df = pd.DataFrame(columns=range(len(idx)))
df.columns = idx
print(df)
Col3 Col2 Col1
subcol1 subcol2 subcol2
顯然,該列MultiIndex未排序。我們可以通過以下方式進行檢查:
print(df.columns.is_monotonic)
False
這很重要,因為如果索引已排序,Pandas 會更快地執行索引查找和其他操作,因為它可以使用假定排序順序的操作并且速度更快。事實上,如果我們嘗試洗掉一列:
df.drop('Col1', axis=1)
PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.
df.drop('Col1', axis=1)
相反,如果我們在洗掉之前對索引進行排序,警告就會消失:
print(df.sort_index(axis=1))
# Index is now sorted in lexical order.
Col1 Col2 Col3
subcol2 subcol2 subcol1
# No warning here.
df.sort_index(axis=1).drop('Col1', axis=1)
因此,如果您希望警告消失,您可以構建它MultiIndex以便對其進行 lexsorted 或在之后對其進行排序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/476535.html
下一篇:嵌套的while陳述句中沒有迭代
