我想加入(或合并(2个数据帧,其中第二个数据帧的索引是第一个数据帧索引的子字符串。我可以通过创建一个临时列来实现这一点,该列是索引的子字符串,然后连接到此列,但我相信还有另一种更智能的方法
df1:
XX0001S1 4
XX0001S2 4.5
XX0001S3 4
XX0253S1 13
XX0254S3 5
df2
XX0001 good
XX0253 bad
XX0254 average
结果应该是:
XX0001S1 4 good
XX0001S2 4.5 good
XX0001S3 4 good
XX0253S1 13 bad
XX0254S3 5 average
有什么想法吗?
M。
重要:如果短索引中存在regex保留字符,则此解决方案可能会失败。
使用字符串访问器可以避免显式创建新列,如本答案所示。只需将找到的短索引映射到相应的文本值即可。
数据
为方便起见,已将名称分配给示例数据列。只需用实际的替换它们。
df
Out[75]:
val1
XX0001S1 4.0
XX0001S2 4.5
XX0001S3 4.0
XX0253S1 13.0
XX0254S3 5.0
df2
Out[77]:
text
XX0001 good
XX0253 bad
XX0254 average
代码
溶液可以放入一个内胆中。为了清楚起见,我把它单独写了。
# 1. regex search pattern at string beginning
patt = "^(" + "|".join(df2.index.values) + ")"
# 2. find corresponding substrings via accessor
idx2_values = df.index.str.extract(patt, expand=False)
# 3.map index to the contents
df["text"] = df2.loc[idx2_values, "text"].values
# result
df
Out[108]:
val1 text
XX0001S1 4.0 good
XX0001S2 4.5 good
XX0001S3 4.0 good
XX0253S1 13.0 bad
XX0254S3 5.0 average