Pandas / Python - 合并键位于 2 个子字符串中的数据帧
Pandas / Python - Merge dataframes where the key is located in 2 sub-strings
这个问题问了好几次了,好像没人能回答...
我正在寻找一个 loop/fuction 或一个简单的代码,它可以查看不同数据框中的 2 列并输出第三列。此示例与我们有一个字符串和一个子字符串的简单合并或合并完全不同......在这个示例中,我们有 2 个子字符串进行比较,如果存储在子字符串行中的键之一存在于中,则输出第三列在不同数据帧的另一个子字符串行中。
这是例子:
data = [['Alex','11111111 20'],['Bob','2222222 0000'],['Clarke','33333 999999']]
df = pd.DataFrame(data,columns=['Name','Code'])
df
data = [['Reed','0000 88'],['Ros',np.nan],['Jo','999999 66']]
df1 = pd.DataFrame(data,columns=['SecondName','Code2'])
我需要的是找到两个代码的部分相同的地方,如 999999
或 0000
并输出 SecondName
预期输出:
我已经完成了我的研究,我找到了一种方法来从一个字符串中找到一个子字符串,而不是像我的例子中那样从另一个子字符串中找到一个子字符串。
您需要拆分代码并连接合并结果的所有可能组合。
这是工作代码:
import pandas as pd
import numpy as np
data = [['Alex','11111111 20'],['Bob','2222222 0000'],['Clarke','33333 999999']]
df = pd.DataFrame(data,columns=['Name','Code'])
data = [['Reed','0000 88'],['Ros',np.nan],['Jo','999999 66']]
df1 = pd.DataFrame(data,columns=['SecondName','Code2'])
df[['c1', 'c2']] = df.Code.str.split(" ", expand=True)
df1[['c1', 'c2']] = df1.Code2.str.split(" ", expand=True)
rdf = pd.DataFrame()
for col1 in ['c1', 'c2']:
for col2 in ['c1', 'c2']:
rdf = pd.concat([rdf, df.merge(df1, left_on=[col1], right_on=[col2], how='inner')], axis=0)
rdf = df.merge(rdf[['Name', 'SecondName']], on='Name', how='outer')
print(rdf[['Name', 'SecondName']])
输出:
Name SecondName
0 Alex NaN
1 Bob Reed
2 Clarke Jo
这个问题问了好几次了,好像没人能回答...
我正在寻找一个 loop/fuction 或一个简单的代码,它可以查看不同数据框中的 2 列并输出第三列。此示例与我们有一个字符串和一个子字符串的简单合并或合并完全不同......在这个示例中,我们有 2 个子字符串进行比较,如果存储在子字符串行中的键之一存在于中,则输出第三列在不同数据帧的另一个子字符串行中。
这是例子:
data = [['Alex','11111111 20'],['Bob','2222222 0000'],['Clarke','33333 999999']]
df = pd.DataFrame(data,columns=['Name','Code'])
df
data = [['Reed','0000 88'],['Ros',np.nan],['Jo','999999 66']]
df1 = pd.DataFrame(data,columns=['SecondName','Code2'])
我需要的是找到两个代码的部分相同的地方,如 999999
或 0000
并输出 SecondName
预期输出:
我已经完成了我的研究,我找到了一种方法来从一个字符串中找到一个子字符串,而不是像我的例子中那样从另一个子字符串中找到一个子字符串。
您需要拆分代码并连接合并结果的所有可能组合。
这是工作代码:
import pandas as pd
import numpy as np
data = [['Alex','11111111 20'],['Bob','2222222 0000'],['Clarke','33333 999999']]
df = pd.DataFrame(data,columns=['Name','Code'])
data = [['Reed','0000 88'],['Ros',np.nan],['Jo','999999 66']]
df1 = pd.DataFrame(data,columns=['SecondName','Code2'])
df[['c1', 'c2']] = df.Code.str.split(" ", expand=True)
df1[['c1', 'c2']] = df1.Code2.str.split(" ", expand=True)
rdf = pd.DataFrame()
for col1 in ['c1', 'c2']:
for col2 in ['c1', 'c2']:
rdf = pd.concat([rdf, df.merge(df1, left_on=[col1], right_on=[col2], how='inner')], axis=0)
rdf = df.merge(rdf[['Name', 'SecondName']], on='Name', how='outer')
print(rdf[['Name', 'SecondName']])
输出:
Name SecondName
0 Alex NaN
1 Bob Reed
2 Clarke Jo