返回列中的第一个数值

时间:2018-11-16 03:42:31

标签: python pandas function dataframe

这几乎就是我的数据框的样子(由yearcountries索引。)

                   ISO   gini  efw
year    countries                                                                                   
1970    Argentina   ARG  NaN   5.67 
1975    Argentina   ARG  NaN   3.13
1980    Argentina   ARG  40.8  4.25
1985    Argentina   ARG  NaN   3.53
1990    Argentina   ARG  NaN   4.47 
1970    Bolivia     BOL  NaN   NaN  
1975    Bolivia     BOL  NaN   NaN
1980    Bolivia     BOL  NaN   4.08
1985    Bolivia     BOL  NaN   3.52 
1990    Bolivia     BOL  42.0  5.62 
2010    Uruguay     URY  44.5  7.33
2011    Uruguay     URY  42.2  7.39
2012    Uruguay     URY  39.9  7.34
2013    Uruguay     URY  40.5  7.26 
1970    Venezuela   VEN  NaN   7.18
1975    Venezuela   VEN  NaN   6.22
1980    Venezuela   VEN  NaN   6.72 
1985    Venezuela   VEN  NaN   6.08
1990    Venezuela   VEN  NaN   5.55
1995    Venezuela   VEN  47.8  4.35
2000    Venezuela   VEN  NaN   5.89

我想提出一个函数,该函数标识NaN列中的第一个非gini值,并返回与yearefw值对应的gini列中的值。

例如,如果Nan的第一个非Argentina是40.8,我希望函数返回40.8,该值的年份(1980)和efw的值也是1980年(4.25)。

理想情况下,新数据框将如下所示。每个国家都有。

                    ISO   gini  efw
year    countries                                                                                   
1980    Argentina   ARG  40.8   4.25 
2016    Argentina   ARG  43.60  3.13

最后一行对应于2016年,即有可用数据的最后一年。

1 个答案:

答案 0 :(得分:1)

使用它,按条件获取,然后重置索引,然后对值进行排序,然后再次对数据框进行多索引:

print(df[df['gini'].notnull()].reset_index().sort_values('year').iloc[[0, -1]].set_index(['year','countries']))