Pandas 连接/合并数据帧,其中索引是其他索引的子字符串

Pandas 连接/合并数据帧,其中索引是其他索引的子字符串,pandas,dataframe,join,merge,Pandas,Dataframe,Join,Merge,我想加入(或合并)2个数据帧,其中第二个数据帧的索引是第一个数据帧的子字符串。 我可以通过创建一个临时列(它是索引的子字符串),然后在这个列上进行连接来实现这一点,但我相信还有另一种更智能的方法来实现 df1: df2 结果应该是: XX0001S1 4 good XX0001S2 4.5 good XX0001S3 4 good XX0253S1 13 bad XX0254S3 5 average 有什么想法吗 M.重要:如果在短期指数中存在,此解

我想加入(或合并)2个数据帧,其中第二个数据帧的索引是第一个数据帧的子字符串。 我可以通过创建一个临时列(它是索引的子字符串),然后在这个列上进行连接来实现这一点,但我相信还有另一种更智能的方法来实现

df1:

df2

结果应该是:

XX0001S1    4   good
XX0001S2    4.5 good
XX0001S3    4   good
XX0253S1    13  bad
XX0254S3    5   average
有什么想法吗


M.

重要:如果在短期指数中存在,此解决方案可能失败

如中所示,使用可以避免显式创建新列。只需将找到的短索引映射到相应的文本值即可

数据

为方便起见,为样本数据列指定了名称。只要用实际的替换它们就行了

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

嗨,我认为没有比临时创建专栏更好的方法了。此解决方案有什么问题?非常感谢您的快速响应!
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