我有以下数据框,首先为每个队列计算以下数学运算年+ n /年。值== 2009然后执行每个队列的均值
df
id
year 2009 2010 2011 2012 2013 2014 2015
cohort
2009.0 72092.0 60513.0 48797.0 40968.0 34919.0 30452.0 26961.0
2010.0 NaN 73735.0 61899.0 50263.0 42184.0 36150.0 31516.0
2011.0 NaN NaN 76809.0 64093.0 51372.0 43277.0 36994.0
2012.0 NaN NaN NaN 69776.0 57621.0 46453.0 39098.0
2013.0 NaN NaN NaN NaN 71613.0 58996.0 47657.0
2014.0 NaN NaN NaN NaN NaN 65430.0 52540.0
2015.0 NaN NaN NaN NaN NaN NaN 67121.0
2016.0 NaN NaN NaN NaN NaN NaN NaN
2017.0 NaN NaN NaN NaN NaN NaN NaN
我将展示我想要执行的数学运算,因为我的英语不好而且数学是一种通用语言:)
自2009年起每1年过去一次:(n = 1)
需要的第一个值=((60513.0 / 72092.0)+(61899.0 / 73735.0)+(64093.0 + 76809.0)+(57621.0 / 69776.0)+(58996.0 + 71613.0)+(52540.0 / 65430.0))/ 6
自2009年起每2年通过一次:(n = 2)
所需的第二个值=((48797.0 / 72092.0)+(50263.0 / 73735.0)+(51372.0 / 76809.0)+(46453.0 / 69776.0)+(47657.0 / 71613.0))/ 5
自从2009年以来每3年通过一次:(n = 3)(最后一个,我认为这个我想做的循环将会理解)
需要的第三个值=((40968.0 / 72092.0)+(42184.0 / 73735.0)+(43277.0 / 76809.0)+(39098.0 / 69776.0))/ 4
依此类推,直到最后一个值为
最后一个值= 26961.0 / 72092.0
提前致谢并抱歉我的英文
我正在尝试这样的事情,也许它可以提供帮助
第一个值:
((df1.iloc[0,1]/df1.iloc[0,0]) + (df1.iloc[1,2]/df1.iloc[1,1]) +
(df1.iloc[2,3]/df1.iloc[2,2]) + (df1.iloc[3,4]/df1.iloc[3,3]) +
(df1.iloc[4,5]/df1.iloc[4,4]) + (df1.iloc[5,6]/df1.iloc[5,5]))/6
第二个值:
((df1.iloc[0,2]/df1.iloc[0,0]) + (df1.iloc[1,3]/df1.iloc[1,1]) +
(df1.iloc[2,4]/df1.iloc[2,2]) + (df1.iloc[3,5]/df1.iloc[3,3]) +
(df1.iloc[4,6]/df1.iloc[4,4]))/5
第三个价值:
((df1.iloc[0,3]/df1.iloc[0,0]) + (df1.iloc[1,4]/df1.iloc[1,1]) +
(df1.iloc[2,5]/df1.iloc[2,2]) + (df1.iloc[3,6]/df1.iloc[3,3]))/4
等等......
这样的东西,但有一个循环,它是我正在寻找的代码。
答案 0 :(得分:2)
IIUC,我们需要将NaN
转换到行的底部。然后执行div
和mean
df=df.apply(lambda x: sorted(x, key=pd.isnull), 1)
df.iloc[:,1:].div(df.iloc[:,0],0).mean(0)
Out[36]:
2010 0.827654
2011 0.671719
2012 0.566037
2013 0.485424
2014 0.424914
2015 0.373980
更多信息
df.apply(lambda x: sorted(x, key=pd.isnull), 1)
Out[37]:
2009 2010 2011 2012 2013 2014 2015
2009.0 72092.0 60513.0 48797.0 40968.0 34919.0 30452.0 26961.0
2010.0 73735.0 61899.0 50263.0 42184.0 36150.0 31516.0 NaN
2011.0 76809.0 64093.0 51372.0 43277.0 36994.0 NaN NaN
2012.0 69776.0 57621.0 46453.0 39098.0 NaN NaN NaN
2013.0 71613.0 58996.0 47657.0 NaN NaN NaN NaN
2014.0 65430.0 52540.0 NaN NaN NaN NaN NaN
2015.0 67121.0 NaN NaN NaN NaN NaN NaN
2016.0 NaN NaN NaN NaN NaN NaN NaN
2017.0 NaN NaN NaN NaN NaN NaN NaN