Заменить столбцы с нулевым значением в одном фрейме данных средними значениями столбца с тем же именем в другом фрейме данных. - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть два фрейма данных, df1 и df2, каждый с одинаковым количеством столбцов и одинаковыми именами столбцов, но с разным количеством строк.По сути, в df2 есть много столбцов, которые имеют все 0 значений.

Что я хотел бы сделать, так это чтобы все столбцы в df2 с нулевым значением были заменены средним (средним) значением того же имени столбца (как в df1).

Итак,если df1 имеет такую ​​структуру, как: -

Column1 Column2 ------    Column n
0.4      2.3               1.7
0.7      2.5               1.4
0.1      2.1               1.2

, а df2 имеет такую ​​структуру: -

Column1 Column2 ------    Column n
0      2.3                1.7
0      2.5               1.4
0      2.1               1.2

Я хотел бы заменить column1 (и любые другие столбцы со всеми нулями в df2) со средним значением того же столбца, отображенного в df1.Итак, наконец, df2 будет выглядеть так: -

Column1 Column2 ------    Column n
0.4      2.3               1.7
0.4      2.5               1.4
0.4      2.1               1.2

(Все нулевые значения в столбце 1 df2 заменены на среднее значение столбца 1 в df1.

Я довольно новичок в этом иЯ проверил другие опции, такие как fillna () и replace (), но не могу выполнить именно то, что хочу. Любая помощь в этом отношении очень важна.

1 Ответ

0 голосов
/ 28 февраля 2019

Использование DataFrame.mask с mean:

df = df2.mask(df2 == 0, df1.mean(), axis=1)
print (df)
   Column1  Column2  Column n
0      0.4      2.3       1.7
1      0.4      2.5       1.4
2      0.4      2.1       1.2

numpy альтернативно с numpy.where должно работать быстрее в больших фреймах данных:

df = pd.DataFrame(np.where(df2 == 0, df1.mean(), df1), 
                  index=df1.index,
                  columns=df1.columns)
print (df)
   Column1  Column2  Column n
0      0.4      2.3       1.7
1      0.4      2.5       1.4
2      0.4      2.1       1.2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...