您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 访问最后一个非null值的Pandas

5b51 2022/1/14 8:20:25 python 字数 3075 阅读 495 来源 www.jb51.cc/python

我想用给定组的最后一个有效值填充数据帧NaN.例如: import pandas as pd import random as randy import numpy as np df_size = int(1e1) df = pd.DataFrame({'category': randy.sample(np.repeat(['Strawberry','Apple'

概述

import pandas as pd
import random as randy
import numpy as np

df_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   value
7       Apple     NaN
6       Apple       1
4       Apple       0
5       Apple     NaN
1       Apple     NaN
0  StrawBerry       1
8  StrawBerry     NaN
2  StrawBerry       0
3  StrawBerry       0
9  StrawBerry     NaN

我想要计算的列如下所示:

category   value  last_value
7       Apple     NaN         NaN
6       Apple       1         NaN
4       Apple       0           1
5       Apple     NaN           0
1       Apple     NaN           0
0  StrawBerry       1         NaN
8  StrawBerry     NaN           1
2  StrawBerry       0           1
3  StrawBerry       0           0
9  StrawBerry     NaN           0

尝试shift()和iterrows()但无济于事.

In [11]: df['value'].ffill()
Out[11]:
7   NaN
6     1
4     0
5     0
1     0
0     1
8     1
2     0
3     0
9     0
Name: value,dtype: float64

In [12]: df['value'].ffill().shift(1)
Out[12]:
7   NaN
6   NaN
4     1
5     0
1     0
0     0
8     1
2     1
3     0
9     0
Name: value,dtype: float64

要对每个组执行此操作,您必须先按groupby类别,然后应用此功能

In [13]: g = df.groupby('category')

In [14]: g['value'].apply(lambda x: x.ffill().shift(1))
Out[14]:
7   NaN
6   NaN
4     1
5     0
1     0
0   NaN
8     1
2     1
3     0
9     0
dtype: float64

In [15]: df['last_value'] = g['value'].apply(lambda x: x.ffill().shift(1))

总结

以上是编程之家为你收集整理的python – 访问最后一个非null值的Pandas全部内容,希望文章能够帮你解决python – 访问最后一个非null值的Pandas所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶