Py学习  »  Python

用Python中最长列的值填充NaN

ahbon • 4 年前 • 691 次点击  

我想填补 v5 列的NaN及其最长长度(从左侧按位置)不是NaN列的值。

     v1   v2   v3    v4     v5
0     a   ab  abc  abcd  abcde
1  abcd  abc   ab   NaN    NaN
2     a  abc   ac   cde    NaN
3   cde    c  NaN    cd    NaN

版本5 ,它的最长长度 Not NaN 列是 v1 abcd . 如果存在相同长度的多个值,那么左边的值就具有优先级,例如,在第三行中,我们取 abc 版本5 cde .

在熊猫身上能做到吗?谢谢。

预期输出如下:

     v1   v2   v3    v4     v5
0     a   ab  abc  abcd  abcde
1  abcd  abc   ab   NaN   abcd
2     a  abc   ac   cde    abc
3   cde    c  NaN    cd    cde
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/54618
 
691 次点击  
文章 [ 1 ]  |  最新文章 4 年前
jezrael
Reply   •   1 楼
jezrael    4 年前

Idea是通过 DataFrame.apply 具有 Series.str.len DataFrame.where ,按位置填充缺少的值和最后获取第一列:

df1 = df.apply(lambda x: x.str.len())

df['v5'] = df.where(df1.eq(df1.max(axis=1), axis=0)).bfill(axis=1).iloc[:, 0]
print (df)
     v1   v2   v3    v4     v5
0     a   ab  abc  abcd  abcde
1  abcd  abc   ab   NaN   abcd
2     a  abc   ac   cde    abc
3   cde    c  NaN    cd    cde