Панды проверяют несколько строк и копируют другую строку - PullRequest
0 голосов
/ 01 марта 2019

У меня есть следующий сценарий.

Таблица 1

column_a column_b 
1         10
2         20
3         30
4         40

Таблица 2

column_a new_column 
1         10
2         20
3         30
5         0

Если значения в column_a в обеих таблицах совпадают , new_column должен быть заполнен соответствующим значением из таблицы 1 column_b.Если нет, то 0 должно быть заполнено .

Я мог бы сделать это, используя iterrows на обеих таблицах, но есть ли лучший / эффективный способ?

Спасибо.

Ответы [ 4 ]

0 голосов
/ 01 марта 2019

map + fillna

df2['new_col'] = df2.column_a.map(df1.set_index('column_a').column_b).fillna(0)

print(df2)
   column_a  new_col
0         1     10.0
1         2     20.0
2         3     30.0
3         5      0.0
0 голосов
/ 01 марта 2019

После импорта вашего модуля и создания таблиц table1 и table2.Возможно, вам нужно что-то вроде этого mask = table1['column_a']==table2['column_a'] table2.loc[mask,'new_column']= table1.loc[table1['column_a']==table2['column_a'],'column_b'] table2.loc[~mask,'new_column'] = 0 Обратите внимание, что table1 и table2 построены как import pandas as pd table1 = pd.DataFrame({'column_a':[1,2,3,4],'column_b':[10,20,30,40]}) table2 = pd.DataFrame({'column_a':[1,2,3,5]})

0 голосов
/ 01 марта 2019

Другим вариантом является слияние:

df2.merge(df, on='column_a', how='left')

   column_a  column_b
0         1      10.0
1         2      20.0
2         3      30.0
3         5       NaN

# add replace and rename if you want

df2.merge(df, on='column_a', how='left').replace(np.nan, 0).rename(columns={'column_b':'new_column'})

   column_a  new_column
0         1        10.0
1         2        20.0
2         3        30.0
3         5         0.0
0 голосов
/ 01 марта 2019

Использование np.where

df2.new_column = np.where(df1.column_a.eq(df2.column_a), df1.column_b, 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...