gpt4 book ai didi

python - 如何根据匹配用另一行的数据填充 np.nan 值

转载 作者:太空宇宙 更新时间:2023-11-04 02:35:47 25 4
gpt4 key购买 nike

我需要做以下事情

a=[1,2,3,4,5]
c=[0,100,100,200,200,0]
b=['2013-06-10', np.nan, '2013-02-15', np.nan, '2013-05-15']
df=pd.DataFrame({'a':a,'b':b,'c':c})

这将给出:

   a           b    c
0 1 2013-06-10 100
1 2 NaN 100
2 3 2013-02-15 200
3 4 NaN 200
4 5 2013-05-15 100

我想根据 C 列中的值,在上一行中查找相同的值,并在 B 列为空时填充日期。它最终应该是这样的:-

   a           b    c
0 1 2013-06-10 100
1 2 2013-06-10 100
2 3 2013-02-15 200
3 4 2013-02-15 200
4 5 2013-05-15 100

我目前使用应用 lambda 行方式函数来填充日期,但是因为我的原始数据有数百万行,所以速度会大大降低。我想知道是否有人知道一种更快的方法来根据 C 列中的相同值使用来自不同行的数据填充值

最佳答案

您可以使用 ffill :

df['b'] = df.groupby('c')['b'].ffill()
print (df)
a b c
0 1 2013-06-10 100
1 2 2013-06-10 100
2 3 2013-02-15 200
3 4 2013-02-15 200
4 5 2013-05-15 100

此外,如果在 b 中某些按组的第一个值是 NaN,请使用 apply,因为需要按组应用两个函数:

print (df)
a b c
0 1 NaN 100 <- NaN
1 1 2013-06-10 100
2 2 NaN 100
3 3 2013-02-15 200
4 4 NaN 200
5 5 2013-05-15 100


df['b'] = df.groupby('c')['b'].apply(lambda x: x.ffill().bfill())
print (df)
a b c
0 1 2013-06-10 100
1 1 2013-06-10 100
2 2 2013-06-10 100
3 3 2013-02-15 200
4 4 2013-02-15 200
5 5 2013-05-15 100

关于python - 如何根据匹配用另一行的数据填充 np.nan 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47938653/

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