基于起始字母表,在两个数据帧的列之间执行完全合并

时间:2016-06-23 17:31:42

标签: python pandas

我想在两个不同数据帧的两列(Name)的值之间执行完全合并。只能在以相同字母开头的名称之间进行合并。例如。 ABC应与其他数据框的所有名称合并,这些名称以字母A'开头。这应该是针对所有字母“A'到' Z'我正在编写以下代码。但是完全合并的长度显示为0.我还想将基于每个字母合并后获得的结果附加到新数据框中。我应该做些什么改变?这是我的代码 -

for c in ascii_uppercase:
    df1 = df1[df1.Name.str[0] == c ].copy()
    df2 = df2[df2.Name.str[0] == c].copy()
    df1['Join'] =1
    df2['Join'] =1
    FullMerge = pd.merge(df2,df1, left_on='Join',right_on='Join')
    len(FullMerge)

1 个答案:

答案 0 :(得分:0)

我会在其上创建一个'FirstLetter'和[merge][1]列。

import pandas as pd
import numpy as np
from string import ascii_uppercase

df1 = pd.DataFrame(np.random.choice(list(ascii_uppercase), (5, 3)))
df1 = df1.apply(lambda x: pd.Series([''.join(x)], index=['Name']), axis=1)
df1['FirstLetter'] = df1.Name.str.get(0)

df2 = pd.DataFrame(np.random.choice(list(ascii_uppercase), (1000, 10)))
df2 = df2.apply(lambda x: pd.Series([''.join(x)], index=['Name']), axis=1)
df2['FirstLetter'] = df2.Name.str.get(0)

df1.merge(df2, on='FirstLetter')

您应该对数据帧进行的所有操作是:

df1['FirstLetter'] = df1.Name.str.get(0)
df2['FirstLetter'] = df2.Name.str.get(0)
df1.merge(df2, on='FirstLetter')

具有通用名称的列将附加后缀(您可以控制:docs)。应该表示所有列。警告,您可能需要使用how参数将合并行为更改为'inner'(默认),'outer''left''right'之一。

df1

enter image description here

df2.head()

enter image description here

df1.merge(df2, on='FirstLetter').head()

enter image description here