ホーム>source

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 の2行目 、その最長の v5 列は Not NaN 、それから私たちは v1 を取ります 。最長の長さが同じ複数の値が存在する場合、3行目の例のように、左端の値が優先され、 abcd を使用します。 abc の値として v5 の代わりに 。

パンダでそれを行うことは可能ですか?ありがとう。

予想される出力は次のとおりです。

<前>ウィズウィズ cde
あなたの答え
  • 解決した方法 # 1

    アイデアは、 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

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ android - クロスプラットフォームのランダム再現性