python – 访问最后一个非null值的Pandas
发布时间:2020-05-28 02:53:04 所属栏目:Python 来源:互联网
导读:我想用给定组的最后一个有效值填充数据帧NaN.例如: import pandas as pdimport random as randyimport numpy as npdf_size = int(1e1) df = pd.DataFrame({category: randy.sample(np.repeat([Strawberry,Apple
|
我想用给定组的最后一个有效值填充数据帧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',],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()但无济于事. 解决方法看起来你想先做一个ffill,然后做一个
shift:
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)) (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
