通过比较两个不相等的数据帧的字符串来创建新的数据帧列

时间:2018-09-04 04:41:04

标签: python pandas dataframe apply

在Python中创建df1['Description']字符串等于df1['a']字符串时获得的新数据框列df2['b']的最有效方法是什么?当满足条件时,会将单独的字符串df2['Description']分配给df1['Description']df1df2是大小不等的大数据帧(〜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 :(得分:1)

考虑以下是您的数据框:

df1
a    b
Z0   1  
Z1   2
A7   3

df2
b   Description
W2  asadsde
Z0  evrverve
A7  eveveerv
Z1  jsbdbcje

使用mapassign实现所需输出的代码:

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)

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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列设置为index。因此,代码将是-

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

您的愿望输出将是-

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