Pandas/Python-合并密钥位于2个子字符串中的数据帧
我已经问了好几次这个问题,似乎没有人能回答 我正在寻找一个循环/函数或一个简单的代码,可以查看不同数据帧中的2列并输出第三列。这个例子与简单的合并或一个有一个字符串和一个子字符串的合并完全不同。。。在本例中,如果存储在子字符串行中的一个键存在于不同数据帧的另一个子字符串行中,我们有2个子字符串来比较并输出第三列 例如:Pandas/Python-合并密钥位于2个子字符串中的数据帧,python,pandas,for-loop,merge,substring,Python,Pandas,For Loop,Merge,Substring,我已经问了好几次这个问题,似乎没有人能回答 我正在寻找一个循环/函数或一个简单的代码,可以查看不同数据帧中的2列并输出第三列。这个例子与简单的合并或一个有一个字符串和一个子字符串的合并完全不同。。。在本例中,如果存储在子字符串行中的一个键存在于不同数据帧的另一个子字符串行中,我们有2个子字符串来比较并输出第三列 例如: data = [['Alex','11111111 20'],['Bob','2222222 0000'],['Clarke','33333 999999']] df = pd.
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
你能解释为什么第一行Alex NaN是预期输出的一部分吗?因为我的想法是在数据帧上左合并,这将是df,如果这是有意义的,并且因为在Code2的任何子字符串中都找不到111111111或20。如果代码是空的,你能解释一下为什么我们要合并一个新的df(rdf)吗?这背后的原因是什么?