我有以下数据框:
d2 = {('CAR','ALPHA'): pd.Series(['A22', 'A23', 'A24', 'A25'],index=[2, 3, 4, 5]),
('CAR','BETA'): pd.Series(['B22', 'B23', 'B24', 'B25'],index=[2, 3, 4, 5]),
('MOTOR','SOLO'): pd.Series(['S22', 'S23', 'S24', 'S25'], index=[2, 3, 4, 5])}
db= pd.DataFrame(data=d2)
我希望在0级多索引中具有“ CAR”的列中删除所有值,并将它们设置为行索引之后的NA(例如)。 4。
我正在尝试使用.loc
,但我希望将结果保存在同一数据框中。
第二件事是设置行索引(例如3)之后它们的0多索引级别与'CAR'到NA的列的值不同。
答案 0 :(得分:1)
将slicers用于第一和第二MultiIndex.get_level_values
(按级别值进行比较):
idx = pd.IndexSlice
db.loc[4:, idx['CAR', :]] = np.nan
db.loc[3:, db.columns.get_level_values(0) != 'CAR'] = 'AAA'
或者:
mask = db.columns.get_level_values(0) == 'CAR'
db.loc[4:, mask] = np.nan
db.loc[3:, ~mask] = 'AAA'
print(db)
CAR MOTOR
ALPHA BETA SOLO
2 A22 B22 S22
3 A23 B23 AAA
4 NaN NaN AAA
5 NaN NaN AAA