gpt4 book ai didi

python - Pandas 访问最后一个非空值

转载 作者:太空狗 更新时间:2023-10-30 01:22:59 27 4
gpt4 key购买 nike

我想用给定组的最后一个有效值填充数据框 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),df_size), 'values': randy.sample(np.repeat([np.NaN,0,1],df_size),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

要对每个 执行此操作,您必须先按类别分组,然后应用此函数:

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 - Pandas 访问最后一个非空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17816754/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com