Создание нового столбца данных, сравнивая строки двух неравных данных - PullRequest
0 голосов
/ 04 сентября 2018

Какой наиболее эффективный подход в Python для создания нового столбца фрейма данных df1['Description'] получается, когда df1['a'] строка равна df2['b'] строка? При выполнении условия отдельная строка df2['Description'] будет присвоена df1['Description']. df1 и df2 - большие кадры данных (~ 1/2 миллиона строк) неравного размера.

df1:

a    b
Z0   1  
Z1   2
A7   3

df2:

b    Description
W2   asadsde  
Z0   evrverve
A7   eveveerv

Я хотел бы:

df1
a    b   Description
Z0   1   evrverve  
Z1   2   jsbdbcje
A7   3.  eveveerv

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018
df1 = pd.DataFrame([['Z0', 1],['Z1', 2], ['A7', 3]], columns=['a', 'b'])

    a   b
0   Z0  1
1   Z1  2
2   A7  3

df2 = pd.DataFrame([['W2', 'asadsde'], ['Z0', 'evrverve'], ['A7', 'eveveerv'], ['Z1', 'jsbdbcje']], columns=['a', 'Description'])

    a   Description
0   W2  asadsde
1   Z0  evrverve
2   A7  eveveerv
3   Z1  jsbdbcje

df3 = pd.merge(left=df1, right=df2, on='a', )

    a   b   Description
0   Z0  1   evrverve
1   Z1  2   jsbdbcje
2   A7  3   eveveerv
0 голосов
/ 04 сентября 2018
import pandas as pd
df1 = pd.DataFrame([['Z0', 1],['Z1', 2], ['A7', 3]], columns=['a', 'b'])
df2 = pd.DataFrame([['W2', 'asadsde'], ['Z0', 'evrverve'], ['A7', 'eveveerv'], ['Z1', 'jsbdbcje']], columns=['b', 'Description'])

После инициализации вы можете присоединиться к своим фреймам данных на основе вашего столбца a и установить в качестве индекса ваш столбец других данных datafrmae b. Так что код будет -

df1.join(df2.set_index('b'),on='a')

И ваш желаемый результат будет -

    a   b   description
    0   Z0  1   evrverve
    1   Z1  2   jsbdbcje
    2   A7  3   eveveerv
0 голосов
/ 04 сентября 2018

Учитывая, что это ваши кадры данных:

df1
a    b
Z0   1  
Z1   2
A7   3

df2
b   Description
W2  asadsde
Z0  evrverve
A7  eveveerv
Z1  jsbdbcje

Код для достижения желаемого результата с использованием map и assign:

df1.assign(description = df1['a'].map(dict(df2.values)))


    a   b   description
0   Z0  1   evrverve
1   Z1  2   jsbdbcje
2   A7  3   eveveerv

В df1, если вы хотите только совпадающие строки, используйте dropna:

df1.dropna(inplace=True)
...