简体   繁体   English

熊猫:查找变量的每个不同值的最后一个非空值

[英]Pandas : Find last non-null value for each different value of a variable

I have a dataframe like this one: 我有一个像这样的数据框:

    a1  l1
0   a   NaN
1   a   kl
2   a   NaN
3   a   NaN
4   a   er
5   b   ye
6   b   NaN
7   b   fk
8   b   NaN

What I want is, the last previous non-null value of l1 for each group of a1 values. 我想要的是每组a1值的最后一个上一个非空值l1。 So the expected output is: 因此,预期输出为:

    a1  l1  ex
0   a   NaN NaN
1   a   kl  NaN
2   a   NaN kl
3   a   NaN kl
4   a   er  kl
5   b   ye  NaN
6   b   NaN ye
7   b   fk  ye
8   b   NaN fk

I have tried to use shift but I don´t know how to skip missing values. 我尝试使用shift,但是我不知道如何跳过缺失的值。

You'll need groupby and apply here: 您需要groupby并在此处apply

df['ex'] = df.groupby('a1').l1.apply(lambda x: x.ffill().shift())
df

  a1   l1   ex
0  a  NaN  NaN
1  a   kl  NaN
2  a  NaN   kl
3  a  NaN   kl
4  a   er   kl
5  b   ye  NaN
6  b  NaN   ye
7  b   fk   ye
8  b  NaN   fk

Alternatively, chain two groupby calls in succession: 或者,连续链接两个groupby调用:

df['ex'] = df.groupby('a1').ffill().groupby('a1').shift()
df

  a1   l1   ex
0  a  NaN  NaN
1  a   kl  NaN
2  a  NaN   kl
3  a  NaN   kl
4  a   er   kl
5  b   ye  NaN
6  b  NaN   ye
7  b   fk   ye
8  b  NaN   fk

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM