用最长的列'填充NaN;Python中的s值

用最长的列'填充NaN;Python中的s值,python,pandas,dataframe,Python,Pandas,Dataframe,我想用最长的长度(从左侧开始按位置)而不是NaN列的值填充v5列的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 例如,对于v5的第二行,其最长长度Not NaN列是v1,然后我们取abcd。如果存在具有相同最长长度的多个值,则

我想用最长的长度(从左侧开始按位置)而不是NaN列的值填充
v5
列的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
例如,对于
v5
的第二行,其最长长度
Not NaN
列是
v1
,然后我们取
abcd
。如果存在具有相同最长长度的多个值,则最左边的值具有优先级,例如在第三行中,我们将
abc
作为
v5
的值,而不是
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

其思想是通过使用测试所有值的长度,然后使用缺少的值替换行,而不使用最大的行,将缺少的值回填,最后按位置获取第一列:

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

谢谢,如果最右边的值具有优先级,我应该在代码中修改什么?@ahbon-然后使用
df['v5']=df.where(df1.eq(df1.max(axis=1),axis=0)).ffill(axis=1)。iloc[:,-1]