簡體   English   中英

如何針對特定條件從多索引 dataframe 中過濾列名?

[英]How to filter column names from multiindex dataframe for a specific condition?


df1 = pd.DataFrame(
{
    "empid" : [1,2,3,4,5,6],
    "empname" : ['a', 'b','c','d','e','f'],
    "empcity" : ['aa','bb','cc','dd','ee','ff']
})
df1

df2 = pd.DataFrame(
{
    "empid" : [1,2,3,4,5,6],
    "empname" : ['a', 'b','m','d','n','f'],
    "empcity" : ['aa','bb','cc','ddd','ee','fff']
})
df2

df_all = pd.concat([df1.set_index('empid'),df2.set_index('empid')],axis='columns',keys=['first','second'])
df_all

df_final = df_all.swaplevel(axis = 'columns')[df1.columns[1:]]
df_final

orig = df1.columns[1:].tolist()
print (orig)
['empname', 'empcity']

df_final = (df_all.stack()
                  .assign(comparions=lambda x: x['first'].eq(x['second']))
                  .unstack()
                  .swaplevel(axis = 'columns')
                  .reindex(orig, axis=1, level=0))
print (df_final)

如何從 dataframe df_final 中過濾級別 [0] 列名稱列表,其中比較 = False(考慮在級別 0 有超過 300 個這樣的列)

在此處輸入圖像描述

首先通過DataFrame.xsDataFrame.all測試級別comparions是否都是True

s = df_final.xs('comparions', level=1, axis=1).all()

然后反轉掩碼以測試至少一個帶有過濾器索引的False

L = s.index[~s].tolist()
print (L)
['empname', 'empcity']

暫無
暫無

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

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