用最长的列'填充NaN;Python中的s值
我想用最长的长度(从左侧开始按位置)而不是NaN列的值填充用最长的列'填充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。如果存在具有相同最长长度的多个值,则
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]