#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
Я работаю с двумя фреймами данных, например: df1 и df2, как показано в следующем коде:
import numpy as np
import pandas as pd
df1 = pd.DataFrame([
[1,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN],
[np.NaN,2,np.NaN,np.NaN,np.NaN,np.NaN],
[np.NaN,np.NaN,3,np.NaN,np.NaN,np.NaN],
[np.NaN,np.NaN,np.NaN,4,np.NaN,np.NaN],
[np.NaN,np.NaN,np.NaN,np.NaN,5,np.NaN],
[np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,6],
], columns=['AA','BB','CC','DD', 'EE', 'FF'])
df2 = pd.DataFrame([[100, 200, 300, 400, 500, 600],
[110, 210, 310, 410, 510, 610],
[120, 220, 320, 420, 520, 620],
[130, 230, 330, 430, 530, 630],
[140, 240, 340, 440, 540, 640],
[150, 250, 350, 450, 550, 650]
], columns=['AA', 'BB', 'CC', 'DD', 'EE', 'FF'])
Я хотел бы получить новый фрейм данных df3, который сохраняет значения df2 и заменяет ячейки на Nan в соответствии с индексами df1. Так что результат будет примерно таким:
DataFrame1_______
AA BB CC DD EE FF
0 1.0 NaN NaN NaN NaN NaN
1 NaN 2.0 NaN NaN NaN NaN
2 NaN NaN 3.0 NaN NaN NaN
3 NaN NaN NaN 4.0 NaN NaN
4 NaN NaN NaN NaN 5.0 NaN
5 NaN NaN NaN NaN NaN 6.0
DataFrame2_______
AA BB CC DD EE FF
0 100 200 300 400 500 600
1 110 210 310 410 510 610
2 120 220 320 420 520 620
3 130 230 330 430 530 630
4 140 240 340 440 540 640
5 150 250 350 450 550 650
DataFrame3_______
AA BB CC DD EE FF
0 100.0 NaN NaN NaN NaN NaN
1 NaN 210.0 NaN NaN NaN NaN
2 NaN NaN 320.0 NaN NaN NaN
3 NaN NaN NaN 430.0 NaN NaN
4 NaN NaN NaN NaN 540.0 NaN
5 NaN NaN NaN NaN NaN 650.0
Спасибо за помощь!
Ответ №1:
Если возможно совпадение имен индексов и столбцов между df1
и df2
, используйте DataFrame.mask
:
df3 = df2.mask(df1.isna())
print (df3)
AA BB CC DD EE FF
0 100.0 NaN NaN NaN NaN NaN
1 NaN 210.0 NaN NaN NaN NaN
2 NaN NaN 320.0 NaN NaN NaN
3 NaN NaN NaN 430.0 NaN NaN
4 NaN NaN NaN NaN 540.0 NaN
5 NaN NaN NaN NaN NaN 650.0