基于行索引,列引用返回数据框中的值

时间:2016-05-23 23:27:12

标签: python-2.7 pandas

我的目标是比较列#34;年"在适当的列年份(即1999年,2000年)。然后我想从相应的列返回相应的值。例如,对于阿富汗(第一排),2004年,我想找到名为" 2004"并从包含阿富汗的行返回值。

这是表格。作为参考,该表是1999年至2010年期间单个定义年份的教育程度和每个国家的gdp表之间的sql连接的结果。我的最终目标是从教育数据来自年份返回gdp。

country year    men_ed_yrs  women_ed_yrs    total_ed_yrs    1999    2000    2001    2002    2003    2004    2005    2006    2007    2008    2009    2010
0   Afghanistan 2004    11  5   8   NaN NaN 2461666315  4128818042  4583648922  5285461999  6.275076e+09    7.057598e+09    9.843842e+09    1.019053e+10    1.248694e+10    1.593680e+10
1   Albania 2004    11  11  11  3414760915  3632043908  4060758804  4435078648  5746945913  7314865176  8.158549e+09    8.992642e+09    1.070101e+10    1.288135e+10    1.204421e+10    1.192695e+10
2   Algeria 2005    13  13  13  48640611686 54790060513 54744714110 56760288396 67863829705 85324998959 1.030000e+11    1.170000e+11    1.350000e+11    1.710000e+11    1.370000e+11    1.610000e+11
3   Andorra 2008    11  12  11  1239840270  1401694156  1484004617  1717563533  2373836214  2916913449  3.248135e+09    3.536452e+09    4.010785e+09    4.001349e+09    3.649863e+09    3.346317e+09
4   Anguilla    2008    11  11  11  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

到目前为止,我的方法是:

for value in df_combined_column_named['year']: #loops through each year in year column
    if value in df_combined_column_named.columns

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

使用df.loc

In [62]: df.loc[df['country']=='Afghanistan', '2004'].item()
Out[62]: 5285461999.0

df.loc[rows, columns]可以接受df['country']=='Afghanistan'的布尔系列(例如rows)和'2004'的列标签(例如columns)。它将返回布尔系列为True且在指定列中的行的值。

通常,这可以是多个值,因此返回Series。但是,在这种情况下,系列中只有一个值。因此,要获得该值,请调用item method

请注意,df的已发布字符串表示不清楚数字列标签是字符串是否为整数。如果数字列标签是整数,那么您需要使用

df.loc[df['country']=='Afghanistan', 2004].item()

2004周围没有引号)。

如果您打算对此表单进行大量“查询”,则希望将country列设置为索引:

df = df.set_index('country')

然后,您可以使用get_value访问行标签为'Afghanistan'且列标签为'2004'的单元格中的值:

In [65]: df.get_value('Afghanistan', '2004')
Out[65]: 5285461999.0