gpt4 book ai didi

python - Pandas 按行查找第一个 nan 值并返回列名

转载 作者:太空狗 更新时间:2023-10-30 00:48:22 25 4
gpt4 key购买 nike

我有一个这样的数据框

>>df1 = pd.DataFrame({'A': ['1', '2', '3', '4','5'],
'B': ['1', '1', '1', '1','1'],
'C': ['c', 'A1', None, 'c3',None],
'D': ['d0', 'B1', 'B2', None,'B4'],
'E': ['A', None, 'S', None,'S'],
'F': ['3', '4', '5', '6','7'],
'G': ['2', '2', None, '2','2']})
>>df1

A B C D E F G
0 1 1 c d0 A 3 2
1 2 1 A1 B1 None 4 2
2 3 1 None B2 S 5 None
3 4 1 c3 None None 6 2
4 5 1 None B4 S 7 2

然后我删除包含 nan 值的行df2 = df1.dropna()

   A  B     C     D     E  F     G   
1 2 1 A1 B1 None 4 2
2 3 1 None B2 S 5 None
3 4 1 c3 None None 6 2
4 5 1 None B4 S 7 2

这是一个丢弃的数据框,因为这些行包含 nan 值。但是,我想知道为什么它们会被丢弃?哪一列是“第一个 nan 值列”使该行被删除?我需要一个放弃的举报理由。

输出应该是

['E','C','D','C']

我知道我可以对每一列执行 dropna 然后将其记录为原因但它确实没有效率。

有没有更有效的方法来解决这个问题?谢谢

最佳答案

我认为您可以通过 DataFrame.isnull 创建 bool 数据框,然后按 boolean indexing 过滤带有掩码,其中至少有一个 True by any最后idxmax - 你得到 DataFrame 的第一个 True 值的列名:

booldf = df1.isnull()
print (booldf)
A B C D E F G
0 False False False False False False False
1 False False False False True False False
2 False False True False False False True
3 False False False True True False False
4 False False True False False False False

print (booldf.any(axis=1))
0 False
1 True
2 True
3 True
4 True
dtype: bool

print (booldf[booldf.any(axis=1)].idxmax(axis=1))
1 E
2 C
3 D
4 C
dtype: object

关于python - Pandas 按行查找第一个 nan 值并返回列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39995707/

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