我想在两个不同数据帧的两列(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)
答案 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
df2.head()
df1.merge(df2, on='FirstLetter').head()