这是我的示例 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'])
