在以下代码中,有两个标记相同的数据框(recent_grads
和all_ages
):
majors = recent_grads['Major'].unique()
rg_lower_count = 0
for m in majors:
recent_grads_row = recent_grads[recent_grads['Major'] == m]
all_ages_row = all_ages[all_ages['Major'] == m]
rg_unemp_rate = recent_grads_row.iloc[0]['Unemployment_rate']
aa_unemp_rate = all_ages_row.iloc[0]['Unemployment_rate']
if rg_unemp_rate < aa_unemp_rate:
rg_lower_count += 1
print(rg_lower_count)
为什么我需要iloc[0]
部分(第7行和第8行)?由于每个系列只有一行(最近的grads行和所有年龄行),因此无需指定我想要执行比较的行。
然而,没有它,我收到此错误消息:
ValueError: Can only compare identically-labeled Series objects
答案 0 :(得分:0)
使用iloc
意味着无论索引值如何,您都将始终获得数据框中的第一行;然后,您将获得其中一个列名称,因此您最终会得到每个数据帧的单个标量值。但是,如果您只是比较两个数据帧(或在这种情况下从其列中获得的两个系列),则只有两者具有完全相同的索引标签时才能进行比较。
要了解我的意思,如果您打印recent_grads_row.index[0]
和all_ages_row.index[0]
,您会看到不同的值。另一种选择是用户reset_index
在两个数据框或类似的东西上,但只是选择第一行似乎更简单。