如何根据条件选择列?

时间:2019-10-14 08:19:19

标签: python-3.x pandas dataframe

我有以下数据框:

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)

enter image description here

我希望在0级多索引中具有“ CAR”的列中删除所有值,并将它们设置为行索引之后的NA(例如)。 4。

我正在尝试使用.loc,但我希望将结果保存在同一数据框中。

第二件事是设置行索引(例如3)之后它们的0多索引级别与'CAR'到NA的列的值不同。

1 个答案:

答案 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