如何在python中将连接的值连接到新值



嗨,我是python新手,正在尝试理解加入

我有两个数据帧-

df1
OutputValues
12-99
22-99
264-99
12-323,138-431
4-21
12-123
df2
OldId   NewId
99      191
84       84
323      84
59       59
431      59
208      59
60       59
58       59
325      59
390      59
324      59
564     564
123     564
21      21

我想根据df1中值的后半部分,即hifen之后的值,将这两个值连接起来,例如12-99将df2中的旧id 99和4-21连接到旧id 21。

最后一个新的输出数据帧应该连接到df2中的新值,看起来像-

df3
OutputValues     OutputValues2
12-99               12-191
22-99               22-191
264-99              264-191
12-323,138-431      12-323,138-59
4-21                4-21
12-123,4-325        12-564,4-59

正如您所看到的,现在连接的第一部分与我想要的最终输出数据帧df3中的新id连接,其中有99,它被替换为191,123被替换为564,325被替换为59,等等

我该怎么做?

让我们提取两个部分,映射最后一个部分,然后连接回来:

s = df1.OutputValues.str.extractall('(d+-)(d+)');
df1['OutputValues2'] = (s[0]+s[1].map(df2.astype(str).set_index('OldId')['NewId'])
).groupby(level=0).agg(','.join)

输出:

OutputValues OutputValues2
0           12-99        12-191
1           22-99        22-191
2          264-99       264-191
3  12-323,138-431  12-84,138-59
4            4-21          4-21
5          12-123        12-564

更新:看起来简单的replace也可以工作,但在某些边缘情况下可能会失败:

df1['OutputValues2'] = df1.OutputValues.replace(('-'+df2.astype(str))
.set_index('OldId')['NewId'], 
regex=True)
df1=df1['OutputValues'].str.split(',').explode().str.split('-',expand=True).join(df1)#Separate explode to separate OutputValues and join them back to df1
df3=df2.astype(str).merge(g, left_on='OldId', right_on=1)#merge df2 and new df1
df3=df3.assign(OutputValues2=df3[0].str.cat(h.NewId, sep='-')).drop(columns=['OldId','NewId',0,1])#Create OutputValues2 and drop unrequired columns
df3.groupby('OutputValues')['OutputValues2'].agg(','.join).reset_index()


OutputValues OutputValues2
0          12-123        12-564
1  12-323,138-431  12-84,138-59
2           12-99        12-191
3           22-99        22-191
4          264-99       264-191
5            4-21          4-21

最新更新