合并Pandas时匹配子字符串

2024-07-05 10:54:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在df1['LineA']df2['LineA']匹配的地方合并两个数据帧

但是对于df2的索引1,这只提供了行A:2

我在获取所需输出的第三行时遇到问题

df1

    PointA    LineA   PointB      ID

0     A        2        D   
1     A        3        K
2     B        2        F   
3     C        3        M   
df2

   PointA   LineA    ID 
0    A         2       129
1    A         2(3)    233
2    A         2       560
3    A         3       321
4    A         3       340
5    B         2       213

期望输出:


   PointA    LineA   PointB   ID
0   A          2        D      129
1   A          2        D      233
2   A          2        D      560
3   A          3        K     *233*
4   A          3        K      321
5   A          3        K      340
6   B          2        F      213
7   C          3        M      

我使用了以下代码:

df2.LineA = df2.LineA.map(lambda x: difflib.get_close_matches(x, df1.LineA)[0])

有人能给我指一下正确的方向吗。谢谢


1条回答
网友
1楼 · 发布于 2024-07-05 10:54:57

一种方法是处理括号并使用pandas.DataFrame.explode生成新行:

df1 = pd.DataFrame({'PointA':['A','A','B','C'],
                    'LineA': [2,3,2,3],
                    'LineB': ['D', 'K', 'F', 'M']})

df2 = pd.DataFrame({'PointA':['A','A','A','A','A','B'],
                    'LineA': [2, '2(3)', 2, 3,3, 2],
                    'ID': [129, 233, 560, 321, 340, 213]})


df1['LineA'] = df1['LineA'].astype(str)
df2['LineA'] = df2['LineA'].astype(str)

df2['LineA'] = df2['LineA'].str.replace(')', '').str.split(r'(')
df2 = df2.explode('LineA')

pd.merge(df1, df2, on=['PointA', 'LineA'], how='outer')
  PointA LineA LineB     ID
0      A     2     D  129.0
1      A     2     D  233.0
2      A     2     D  560.0
3      A     3     K  233.0
4      A     3     K  321.0
5      A     3     K  340.0
6      B     2     F  213.0
7      C     3     M    NaN

相关问题 更多 >