联接/合并panda数据帧,其中index是其他索引的子字符串



我想加入(或合并(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

相关内容

最新更新