Есть ли удобный способ заполнения значений na с помощью (первых) значений массива или столбца?Pandas fillna со списком/массивом
Представьте себе следующую 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 должны оставаться. И когда будет больше значений заполнения, не все они будут использоваться. Таким образом, мы должны сделать некоторые подсчета:
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 заполняется сверху вниз, а значения заполнения также выбирается сверху вниз, если есть более заполнить значения, чем Нэн
Какой результат вы хотите? –
Хорошо, я немного изменил вопрос. –
Это [возврат к копиям] (http://pandas.pydata.org/pandas-docs/dev/indexing.html#indexing-view-versus-copy) (причудливая индексация всегда возвращает копию) ... hmm –