Я использую Python Pandas для следующего. У меня три кадра данных, df1
, df2
и df3
. Каждый из них имеет те же размеры, индекс и метки столбцов. Я хотел бы создать четвертый dataframe, который принимает элементы из df1
или df2
в зависимости от значений в df3
:Извлечение данных из двух фреймов данных для создания третьего
df1 = pd.DataFrame(np.random.randn(4, 2), index=list('0123'), columns=['A', 'B'])
df1
Out[67]:
A B
0 1.335314 1.888983
1 1.000579 -0.300271
2 -0.280658 0.448829
3 0.977791 0.804459
df2 = pd.DataFrame(np.random.randn(4, 2), index=list('0123'), columns=['A', 'B'])
df2
Out[68]:
A B
0 0.689721 0.871065
1 0.699274 -1.061822
2 0.634909 1.044284
3 0.166307 -0.699048
df3 = pd.DataFrame({'A': [1, 0, 0, 1], 'B': [1, 0, 1, 0]})
df3
Out[69]:
A B
0 1 1
1 0 0
2 0 1
3 1 0
Новый dataframe, df4
, имеет тот же индекс и столбцов метки и принимает элемент из df1
, если соответствующее значение в df3
- 1
. Он принимает элемент от df2
, если соответствующее значение в df3
- это номер 0
.
Мне нужно решение, которое использует общие ссылки (например, ix
или iloc
), а не фактические метки столбцов и значения индекса, потому что у моего набора данных пятьдесят столбцов и четыреста строк.
Ваш метод работает. Во второй части формулы есть небольшая опечатка, но ситакс выполняет эту работу. Спасибо pd.DataFrame ( df1.as_matrix() * df3.as_matrix() + df2.as_matrix() * (1 - df3.as_matrix()), index = df1.index, columns = df1.columns) – Vijay