import pandas as pdimport random as randyimport numpy as npdf_size = int(1e1) df = pd.DataFrame({'category': randy.sample(np.repeat(['StrawBerry','Apple',],df_size),'values': randy.sample(np.repeat([np.NaN,1],df_size)},index=randy.sample(np.arange(0,10),df_size)).sort_index(by=['category'],ascending=[True])
提供:
category value7 Apple NaN6 Apple 14 Apple 05 Apple NaN1 Apple NaN0 StrawBerry 18 StrawBerry NaN2 StrawBerry 03 StrawBerry 09 StrawBerry NaN
我想要计算的列如下所示:
category value last_value7 Apple NaN NaN6 Apple 1 NaN4 Apple 0 15 Apple NaN 01 Apple NaN 00 StrawBerry 1 NaN8 StrawBerry NaN 12 StrawBerry 0 13 StrawBerry 0 09 StrawBerry NaN 0
尝试shift()和iterrows()但无济于事.
解决方法 看起来你想先做一个ffill
,然后做一个 shift
: In [11]: df['value'].ffill()Out[11]:7 NaN6 14 05 01 00 18 12 03 09 0name: value,dtype: float64In [12]: df['value'].ffill().shift(1)Out[12]:7 NaN6 NaN4 15 01 00 08 12 13 09 0name: value,dtype: float64
要对每个组执行此 *** 作,您必须先按groupby类别,然后应用此功能:
In [13]: g = df.groupby('category')In [14]: g['value'].apply(lambda x: x.ffill().shift(1))Out[14]:7 NaN6 NaN4 15 01 00 NaN8 12 13 09 0dtype: float64In [15]: df['last_value'] = g['value'].apply(lambda x: x.ffill().shift(1))总结
以上是内存溢出为你收集整理的python – 访问最后一个非null值的Pandas全部内容,希望文章能够帮你解决python – 访问最后一个非null值的Pandas所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)