<p>我在另一个帖子上发现了这个,做了一点小改动,它就完成了我想要的。我会张贴的人谁也需要它的定义版本。你知道吗</p>
<pre><code># combine the common columns
def merge_dfs(dfs):
df1 = dfs[0]
df2= dfs[1]
left= df1
right = df2
keyCol = 'Request ID'
commonCols = list(set(left.columns & right.columns))
finalCols = list(set(left.columns | right.columns))
#print('Common = ' + str(commonCols) + ', Final = ' + str(finalCols))
mergeDf = left.merge(right, on=keyCol, how='outer', suffixes=('_left', '_right'))
# combine the common columns
for col in commonCols:
if col != keyCol:
for i, row in mergeDf.iterrows():
leftVal = str(row[col + '_left']).replace('nan', "").strip()
rightVal = str(row[col + '_right']).replace('nan', "").strip()
#print(leftVal + ',' + rightVal)
if leftVal == rightVal:
mergeDf.loc[i, col] = leftVal
else:
mergeDf.loc[i, col] = leftVal + "~" + rightVal
# only use the finalCols
mergeDf = mergeDf[finalCols]
for df in dfs[2:]:
df1 = mergeDf
df2= df
left= df1
right = df2
keyCol ='Request ID'
commonCols = list(set(left.columns & right.columns))
finalCols = list(set(left.columns | right.columns))
#print('Common = ' + str(commonCols) + ', Final = ' + str(finalCols))
mergeDf = left.merge(right, on=keyCol, how='outer', suffixes=('_left', '_right'))
# combine the common columns
for col in commonCols:
if col != keyCol:
for i, row in mergeDf.iterrows():
leftVal = str(row[col + '_left']).replace('nan', "").strip()
rightVal = str(row[col + '_right']).replace('nan', "").strip()
#print(leftVal + ',' + rightVal)
leftValWords = leftVal.split('~')
#print(leftValWords)
if rightVal in leftValWords:
mergeDf.loc[i, col] = leftVal
else:
mergeDf.loc[i, col] = leftVal + '~' + rightVal
# only use the finalCols
mergeDf = mergeDf[finalCols]
mergeDf = mergeDf
return mergeDf
</code></pre>