gpt4 book ai didi

python - 在 PANDAS 中的第一个非 NaN 之后保留行

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

我在 PANDAS 中有一个包含两列和一个索引(日期)的数据框。我想保留第一个常见的非 NaN 元素之后的行。例如,最初我有:

                    A      B        
Index
1/1/1950 NaN 5
2/1/1950 7 NaN
3/1/1950 9 NaN
4/1/1950 NaN 6
5/1/1950 4 15
6/1/1950 2 21
7/1/1950 NaN 5
7/1/1950 12 5
7/1/1950 5 NaN

我想得到

                    A      B        
Index
5/1/1950 4 15
6/1/1950 2 21
7/1/1950 NaN 5
7/1/1950 12 5
7/1/1950 5 NaN

因为 5/1/1950 是第一次 A 和 B 都不是 NaN,我想保留它之后的所有数据。感谢您的帮助。

最佳答案

您可以在 df 上调用 notnull 并使用 all(axis=1) 测试该行中的所有值是否为 True,我们然后可以调用 argmax 获取第一个 True 索引标签并使用 loc 切片 df:

In [37]:
df.loc[df.notnull().all(axis=1).argmax():]

Out[37]:
A B
Index
5/1/1950 4.0 15.0
6/1/1950 2.0 21.0
7/1/1950 NaN 5.0
7/1/1950 12.0 5.0
7/1/1950 5.0 NaN

这是一个分割:

In [38]:
df.notnull()

Out[38]:
A B
Index
1/1/1950 False True
2/1/1950 True False
3/1/1950 True False
4/1/1950 False True
5/1/1950 True True
6/1/1950 True True
7/1/1950 False True
7/1/1950 True True
7/1/1950 True False

In [39]:
df.notnull().all(axis=1)

Out[39]:
Index
1/1/1950 False
2/1/1950 False
3/1/1950 False
4/1/1950 False
5/1/1950 True
6/1/1950 True
7/1/1950 False
7/1/1950 True
7/1/1950 False
dtype: bool

In [40]:
df.notnull().all(axis=1).argmax()

Out[40]:
'5/1/1950'

编辑

正如@DSM 所指出的,使用 df.loc[df.notnull().all(axis=1).cummax()] 会更稳健,因为这将处理重复的索引值

关于python - 在 PANDAS 中的第一个非 NaN 之后保留行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36549447/

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