Skip to main content
 首页 » 编程设计

python之如何将 Pandas DataFrame 列值与多级索引进行比较

2025年05月04日10freeliver54

这是我的示例 DataFrame,名为 df_output,具有多级索引。

City Name   Threshold          Temp     
Atlanta        86      0       87       
                       1       86       
                       2       85        
                       3       89    
Chicago       90       0       92 
                       1       90 
                       2       85 
                       3       65 

我正在尝试创建一个新列来指示 Temp 列中的值是否大于 Threshold 中的值。

我尝试了以下方法:

df_output["Temp > Threshold"] = df_output["Temp"] > df_output.index.get_level_values('Threshold') 

这对所有行都返回了 True。如何将 Temp 列中的值与 Threshold 索引中的相应值进行比较?

编辑: 上面的逻辑是正确的,我的程序为所有行返回 True,因为 Temp 的 dtype 列是 object 而 Threshold 索引是一个 int,因此比较返回了不稳定的结果。

请您参考如下方法:

您的解决方案运行良好。我建议问题在于您的索引是如何定义的。下面是一个示例,说明如何显式设置索引以及成功定义 MultiIndex 后 df.index 应该是什么样子:

df = pd.DataFrame({'City Name': ['Atlanta']*4 + ['Chicago']*4, 
                   'Threshold': [86]*4 + [90]*4, 
                   'Temp': [87, 86, 85, 89, 92, 90, 85, 65]}) 
 
df = df.set_index(['City Name', 'Threshold']) 
 
df['Temp>Threshold'] = df['Temp'] > df.index.get_level_values('Threshold') 
 
print(df) 
 
                     Temp  Temp>Threshold 
City Name Threshold                       
Atlanta   86           87            True 
          86           86           False 
          86           85           False 
          86           89            True 
Chicago   90           92            True 
          90           90           False 
          90           85           False 
          90           65           False 
 
print(df.index) 
 
MultiIndex(levels=[['Atlanta', 'Chicago'], [86, 90]], 
           labels=[[0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 1, 1, 1, 1]], 
           names=['City Name', 'Threshold'])