gpt4 book ai didi

Python:Groupby 第一个非 NaN 值

转载 作者:行者123 更新时间:2023-12-05 09:17:18 26 4
gpt4 key购买 nike

我有以下数据框:

id    number   
1 13
1 13
1 NaN
1 NaN
2 11
2 11
2 11
2 NaN

我想找到每个 id 的第一个非 NaN 值并将其标记为 1。结果应如下所示:

id    number     code   
1 13 NaN
1 13 1
1 NaN NaN
1 NaN NaN
2 11 NaN
2 11 NaN
2 11 1
2 NaN NaN

我尝试了以下命令,然后从那里开始:

df["test"] = df.groupby("id")["number"].first_valid_index()

它给了我以下错误:无法访问“SeriesGroupBy”对象的可调用属性“first_valid_index”,请尝试使用“apply”方法

然后我试了一下:

df['test'] = df.groupby("id")['number'].apply(lambda x: x.first_valid_index())

但这只给了我一列 Nats...

有人知道如何有效地解决这个问题吗?

最佳答案

假设您的意思是 last_valid_index,您可以应用 last_valid_index 函数和 loc 来分配 -

df.loc[df.groupby('id').number.apply(pd.Series.last_valid_index), 'code'] = 1
df

id number code
0 1 13.0 NaN
1 1 13.0 1.0
2 1 NaN NaN
3 1 NaN NaN
4 2 11.0 NaN
5 2 11.0 NaN
6 2 11.0 1.0
7 2 NaN NaN

或者,使用 groupby + idxmax -

df.loc[df.number.notnull().cumsum().groupby(df.id).idxmax(), 'code'] = 1
df

id number code
0 1 13.0 NaN
1 1 13.0 1.0
2 1 NaN NaN
3 1 NaN NaN
4 2 11.0 NaN
5 2 11.0 NaN
6 2 11.0 1.0
7 2 NaN NaN

关于Python:Groupby 第一个非 NaN 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48613481/

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