小编典典

熊猫列列表中每行的第一个非空值

python

如果我在Pandas中有一个DataFrame,看起来像这样:

    A   B   C
0   1 NaN   2
1 NaN   3 NaN
2 NaN   4   5
3 NaN NaN NaN

如何从每一行中获取第一个非空值?例如,上面我想得到:([1, 3, 4, None]或等效的Series)。


阅读 207

收藏
2020-12-20

共1个答案

小编典典

这是一种非常麻烦的方法,首先用于first_valid_index获取有效列,将返回的序列转换为数据框,以便我们可以apply逐行调用并将其索引回原始df:

In [160]:
def func(x):
    if x.values[0] is None:
        return None
    else:
        return df.loc[x.name, x.values[0]]
pd.DataFrame(df.apply(lambda x: x.first_valid_index(), axis=1)).apply(func,axis=1)
​
Out[160]:
0     1
1     3
2     4
3   NaN
dtype: float64

编辑

稍微干净一点的方法:

In [12]:
def func(x):
    if x.first_valid_index() is None:
        return None
    else:
        return x[x.first_valid_index()]
df.apply(func, axis=1)

Out[12]:
0     1
1     3
2     4
3   NaN
dtype: float64
2020-12-20