あなただけstack
列缶(インデックスに移動)し、ドロップ=真でreset_index
を呼び出し、またはあなたが出発点としてreset_index()
1を使用してreset_columns()
方法を書くことができる(frame.py#のL2940を参照してください)
df.query('some query')
.apply(cool_func)
.stack(level='unwanted_col_level_name')
.reset_index('unwanted_col_level_name',drop=True)
.apply(another_cool_func)
オルタナティブ:モンキーパッチソリューション
def drop_column_levels(self, level=None, inplace=False):
"""
For DataFrame with multi-level columns, drops one or more levels.
For a standard index, or if dropping all levels of the MultiIndex, will revert
back to using a classic RangeIndexer for column names.
Parameters
----------
level : int, str, tuple, or list, default None
Only remove the given levels from the index. Removes all levels by
default
inplace : boolean, default False
Modify the DataFrame in place (do not create a new object)
Returns
-------
resetted : DataFrame
"""
if inplace:
new_obj = self
else:
new_obj = self.copy()
new_columns = pd.core.common._default_index(len(new_obj.columns))
if isinstance(self.index, pd.MultiIndex):
if level is not None:
if not isinstance(level, (tuple, list)):
level = [level]
level = [self.index._get_level_number(lev) for lev in level]
if len(level) < len(self.columns.levels):
new_columns = self.columns.droplevel(level)
new_obj.columns = new_columns
if not inplace:
return new_obj
# Monkey patch the DataFrame class
pd.DataFrame.drop_column_levels = drop_column_levels
カラムを削除する '.drop'を探していますか? – James
こんにちは - いいえ軸 'DataFrame.columns'の' MultiIndex'からレベルを削除したい – dmeu
列インデックスレベルが削除された場合に発生する列名の重複をどのように処理したいですか? – James