Xav*_*Dou 6 python merge dataframe pandas
当DF2的 Test1 列中的字符串包含DF1的 Test1 列的子字符串时,我想合并下面两个数据帧的行。
DF1 = pd.DataFrame({'Test1':list('ABC'),
'Test2':[1,2,3]})
print (DF1)
Test1 Test2
0 A 1
1 B 2
2 C 3
DF2 = pd.DataFrame({'Test1':['ee','bA','cCc','D'],
'Test2':[1,2,3,4]})
print (DF2)
Test1 Test2
0 ee 1
1 bA 2
2 cCc 3
3 D 4
Run Code Online (Sandbox Code Playgroud)
为此,我能够使用“str contains”来识别 DF2.Test1 字符串中可用的 DF1.Test1 子字符串
输入:
for i in DF1.Test1:
ok = DF2[Df2.Test1.str.contains(i)]
print(ok)
Run Code Online (Sandbox Code Playgroud)
输出:
现在,我想在输出中添加与 Test2 的字符串匹配的 Test1 子字符串的合并
输出:
为此,我尝试使用“pd.merge”和“if”,但我还无法找到正确的代码..您有建议吗?
for i in DF1.Test1:
if DF2.Test1.str.contains(i) == 'True':
ok = pd.merge(DF1, DF2, on= ['Test1'[i]], how='outer')
print(ok)
Run Code Online (Sandbox Code Playgroud)
谢谢你的想法:)
我相信您需要extract新列的值,然后merge最后删除辅助列Test3:
pat = '|'.join(r"{}".format(x) for x in DF1.Test1)
DF2['Test3'] = DF2.Test1.str.extract('('+ pat + ')', expand=False)
DF = pd.merge(DF1, DF2, left_on= 'Test1', right_on='Test3').drop('Test3', axis=1)
print (DF)
Test1_x Test2_x Test1_y Test2_y
0 A 1 bA 2
1 C 3 cCc 3
Run Code Online (Sandbox Code Playgroud)
细节:
print (DF2)
Test1 Test2 Test3
0 ee 1 NaN
1 bA 2 A
2 cCc 3 C
3 D 4 NaN
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10668 次 |
| 最近记录: |