如何在 pandas 中获取每行的第二个非空值

How to get second non null value per row in pandas

如何在 pandas 中获取每行的第二个非空值。我知道使用 first_valid_index() 我们可以获得每行的第一个非空值,但是如何获得第二个非空值。 有帮助吗?

您可以使用df.notna() with cumsum and idxmax

另外,为了处理列中没有 NaN 值的情况,请使用 series.where 和相同的解决方案,但条件是检查空值的总和

df.notna().cumsum().eq(2).idxmax().where(df.isna().sum().gt(1))

示例:

data = {'id': [np.nan,1,1,np.nan,2,3],
    'value': ['a','a',np.nan,np.nan,'b','c'],
    'obj_id': [np.nan,2,3,3,3,np.nan],
    'test': [1,2,3,4,5,6]}
df = pd.DataFrame (data)

    id value  obj_id  test
0  NaN     a     NaN     1
1  1.0     a     2.0     2
2  1.0   NaN     3.0     3
3  NaN   NaN     3.0     4
4  2.0     b     3.0     5
5  3.0     c     NaN     6

对于列级别检查:

df.notna().cumsum().eq(2).idxmax().where(df.notna().sum().gt(1))

id        2
value     1
obj_id    2
test      1
dtype: float64

对于 rowlevel ,您可以使用相同的逻辑,但 axis=1:

df.notna().cumsum(1).eq(2).idxmax(1).where(df.notna().sum(1).gt(1))
0      test
1     value
2    obj_id
3      test
4     value
5     value
dtype: object