1 回答

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個贊
index
為并columns
使用 helperDataFrame
的最后一次傳遞創(chuàng)建掩碼DataFrame.loc
:
df1 = df.index.to_frame()
m1 = df1.where(df1=='all').bfill(axis=1).count(axis=1).isin([0, df.index.nlevels])
df2 = df.columns.to_frame()
m2 = df2.where(df2=='all').bfill(axis=1).count(axis=1).isin([0, df.columns.nlevels])
df = df.loc[m1, m2]
print (df)? ??
? ? ? ? ? ? ? ? F? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
E? ? ? ? ? ? ?E1? ? ? ? ? ? ?E2? ? ? ? ? ? all
D? ? ? ? ? ? ?D1? ?D2? all? ?D1? ?D2? all? all
A? ?B? ?C? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
a1? all all? NaN? NaN? NaN? NaN? NaN? NaN? 9.0
? ? b1? all? NaN? NaN? 3.0? NaN? NaN? NaN? NaN
? ? ? ? c1? ?1.0? NaN? NaN? NaN? NaN? NaN? NaN
? ? ? ? c2? ?NaN? 2.0? NaN? NaN? NaN? NaN? NaN
? ? b2? all? NaN? NaN? NaN? NaN? NaN? 6.0? NaN
? ? ? ? c1? ?NaN? NaN? NaN? 4.0? NaN? NaN? NaN
? ? ? ? c2? ?NaN? NaN? NaN? NaN? 5.0? NaN? NaN
all all all? NaN? NaN? NaN? NaN? NaN? NaN? 9.0
? ? b1? all? NaN? NaN? 3.0? NaN? NaN? NaN? NaN
? ? b2? all? NaN? NaN? NaN? NaN? NaN? 6.0? NaN
?
詳情:
用于:MultiIndex.to_frame_DataFrame
print (df.index.to_frame())? ??
? ? ? ? ? ? ? ?A? ? B? ? C
A? ?B? ?C? ? ? ? ? ? ? ? ?
a1? all all? ?a1? all? all
? ? ? ? c1? ? a1? all? ?c1
? ? ? ? c2? ? a1? all? ?c2
? ? b1? all? ?a1? ?b1? all
? ? ? ? c1? ? a1? ?b1? ?c1
? ? ? ? c2? ? a1? ?b1? ?c2
? ? b2? all? ?a1? ?b2? all
? ? ? ? c1? ? a1? ?b2? ?c1
? ? ? ? c2? ? a1? ?b2? ?c2
all all all? all? all? all
? ? ? ? c1? ?all? all? ?c1
? ? ? ? c2? ?all? all? ?c2
? ? b1? all? all? ?b1? all
? ? ? ? c1? ?all? ?b1? ?c1
? ? ? ? c2? ?all? ?b1? ?c2
? ? b2? all? all? ?b2? all
? ? ? ? c1? ?all? ?b2? ?c1
? ? ? ? c2? ?all? ?b2? ?c2
然后將非替換all為缺失值DataFrame.where:
print (df1.where(df1=='all'))
? ? ? ? ? ? ? ?A? ? B? ? C
A? ?B? ?C? ? ? ? ? ? ? ? ?
a1? all all? NaN? all? all
? ? ? ? c1? ?NaN? all? NaN
? ? ? ? c2? ?NaN? all? NaN
? ? b1? all? NaN? NaN? all
? ? ? ? c1? ?NaN? NaN? NaN
? ? ? ? c2? ?NaN? NaN? NaN
? ? b2? all? NaN? NaN? all
? ? ? ? c1? ?NaN? NaN? NaN
? ? ? ? c2? ?NaN? NaN? NaN
all all all? all? all? all
? ? ? ? c1? ?all? all? NaN
? ? ? ? c2? ?all? all? NaN
? ? b1? all? all? NaN? all
? ? ? ? c1? ?all? NaN? NaN
? ? ? ? c2? ?all? NaN? NaN
? ? b2? all? all? NaN? all
? ? ? ? c1? ?all? NaN? NaN
? ? ? ? c2? ?all? NaN? NaN
回填無誤,在這里all,由bfill:
print (df1.where(df1=='all').bfill(axis=1))
? ? ? ? ? ? ? ?A? ? B? ? C
A? ?B? ?C? ? ? ? ? ? ? ? ?
a1? all all? all? all? all
? ? ? ? c1? ?all? all? NaN
? ? ? ? c2? ?all? all? NaN
? ? b1? all? all? all? all
? ? ? ? c1? ?NaN? NaN? NaN
? ? ? ? c2? ?NaN? NaN? NaN
? ? b2? all? all? all? all
? ? ? ? c1? ?NaN? NaN? NaN
? ? ? ? c2? ?NaN? NaN? NaN
all all all? all? all? all
? ? ? ? c1? ?all? all? NaN
? ? ? ? c2? ?all? all? NaN
? ? b1? all? all? all? all
? ? ? ? c1? ?all? NaN? NaN
? ? ? ? c2? ?all? NaN? NaN
? ? b2? all? all? all? all
? ? ? ? c1? ?all? NaN? NaN
? ? ? ? c2? ?all? NaN? NaN
通過以下方式計算非缺失值DataFrame.count:
print (df1.where(df1=='all').bfill(axis=1).count(axis=1))
A? ? B? ? C??
a1? ?all? all? ? 3
? ? ? ? ? c1? ? ?2
? ? ? ? ? c2? ? ?2
? ? ?b1? ?all? ? 3
? ? ? ? ? c1? ? ?0
? ? ? ? ? c2? ? ?0
? ? ?b2? ?all? ? 3
? ? ? ? ? c1? ? ?0
? ? ? ? ? c2? ? ?0
all? all? all? ? 3
? ? ? ? ? c1? ? ?2
? ? ? ? ? c2? ? ?2
? ? ?b1? ?all? ? 3
? ? ? ? ? c1? ? ?1
? ? ? ? ? c2? ? ?1
? ? ?b2? ?all? ? 3
? ? ? ? ? c1? ? ?1
? ? ? ? ? c2? ? ?1
測試是否0- 這意味著回填行/列,以及是否全部NaN與級別數(shù)匹配MultiIndex.nlevels:
print (df1.where(df1=='all').bfill(axis=1).count(axis=1).isin([0, df.index.nlevels]))
?A? ? B? ? C??
a1? ?all? all? ? ?True
? ? ? ? ? c1? ? ?False
? ? ? ? ? c2? ? ?False
? ? ?b1? ?all? ? ?True
? ? ? ? ? c1? ? ? True
? ? ? ? ? c2? ? ? True
? ? ?b2? ?all? ? ?True
? ? ? ? ? c1? ? ? True
? ? ? ? ? c2? ? ? True
all? all? all? ? ?True
? ? ? ? ? c1? ? ?False
? ? ? ? ? c2? ? ?False
? ? ?b1? ?all? ? ?True
? ? ? ? ? c1? ? ?False
? ? ? ? ? c2? ? ?False
? ? ?b2? ?all? ? ?True
? ? ? ? ? c1? ? ?False
? ? ? ? ? c2? ? ?False
dtype: bool
np.triu編輯:這里是比較的子字符串,然后是僅由 s 行鏈接創(chuàng)建的輔助數(shù)組的掩碼的所有值False:
f = lambda x: x.str.contains('all')
arr1 = np.triu(np.ones((df.index.nlevels,df.index.nlevels), dtype=bool), False)
arr2 = np.triu(np.ones((df.columns.nlevels,df.columns.nlevels), dtype=bool), False)
print (arr1)
[[ True? True? True]
?[False? True? True]
?[False False? True]]
arr11 = df.index.to_frame().astype(str).apply(f).to_numpy()
arr22 = df.columns.to_frame().astype(str).apply(f).to_numpy()
#https://stackoverflow.com/a/51352806/2901002
m1 = (arr11[:, None] == arr1).all(-1).any(axis=1) | ~arr11.any(axis=1)
m2 = (arr22[:, None] == arr2).all(-1).any(axis=1) | ~arr22.any(axis=1)
df = df.loc[m1, m2]
print (df)?
? ? ? ? ? ? ? ? ? ? measure_F? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
E? ? ? ? ? ? ? ? ? ? ? ? ? E1? ? ? ? ? ? ?E2? ? ? ? ? ? ? ? ?all? E2
D? ? ? ? ? ? ? ? ? ? ? ? ? D1? ?D2? all? ?D1? ?D2 all::3::2? all all
A? ?B? ?C? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
a1? all all? ? ? ? ? ? ? ?NaN? NaN? NaN? NaN? NaN? ? ? ?NaN? 9.0 NaN
? ? b1? all? ? ? ? ? ? ? ?NaN? NaN? 3.0? NaN? NaN? ? ? ?NaN? NaN NaN
? ? ? ? c1? ? ? ? ? ? ? ? 1.0? NaN? NaN? NaN? NaN? ? ? ?NaN? NaN NaN
? ? ? ? c2? ? ? ? ? ? ? ? NaN? 2.0? NaN? NaN? NaN? ? ? ?NaN? NaN NaN
? ? b2? all? ? ? ? ? ? ? ?NaN? NaN? NaN? NaN? NaN? ? ? ?6.0? NaN NaN
? ? ? ? c1? ? ? ? ? ? ? ? NaN? NaN? NaN? 4.0? NaN? ? ? ?NaN? NaN NaN
? ? ? ? c2? ? ? ? ? ? ? ? NaN? NaN? NaN? NaN? 5.0? ? ? ?NaN? NaN NaN
all all all::5::all? ? ? ?NaN? NaN? NaN? NaN? NaN? ? ? ?NaN? 9.0 NaN
添加回答
舉報