我的目标是比较列#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
有什么想法吗?
答案 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