3

na 値を配列または列の (最初の) 値で埋める便利な方法はありますか?

次の DataFrame を想像してください。

dfcolors = pd.DataFrame({'Colors': ['Blue', 'Red', np.nan, 'Green', np.nan, np.nan, 'Brown']})

  Colors
0   Blue
1    Red
2    NaN
3  Green
4    NaN
5    NaN
6  Brown

NaN 値を別の DataFrame または配列の値で埋めたいので、次のようにします。

dfalt = pd.DataFrame({'Alt': ['Cyan', 'Pink']})

           Alt
0         Cyan
1         Pink

より多くの NaN がある場合は、値を埋めて、いくつかの NaN を残す必要があります。また、より多くの塗りつぶし値がある場合、それらすべてが使用されるわけではありません。したがって、いくつかのカウントを行う必要があります。

n_missing = len(dfcolors) - dfcolors.count().values[0]    
n_fill = min(n_missing, len(dfalt))

数値n_fillは、入力できる値の量です。

満たすことができる/満たすべき NaN 値を選択するには、次のようにします。

dfcolors.Colors[pd.isnull(dfcolors.Colors)][:n_fill]

2    NaN
4    NaN
Name: Colors, dtype: object

塗り値の選択

dfalt.Alt[:n_fill]

0    Cyan
1    Pink
Name: Alt, dtype: object

そして、私は次のようなことに行き詰まっています:

dfcolors.Colors[pd.isnull(dfcolors.Colors)][:n_fill] = dfalt.Alt[:n_fill]

これは機能しません...ヒントは素晴らしいでしょう。

これは私が望む出力です:

  Colors
0   Blue
1    Red
2   Cyan
3  Green
4   Pink
5    NaN
6  Brown

NaN 値は上から下に塗りつぶされ、NaN よりも多くの塗りつぶし値がある場合は、塗りつぶし値も上から下に選択されます。

4

2 に答える 2