“合并”列表中元素上的2个数据帧?

2024-05-28 20:34:38 发布

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

我想进行以下合并(难以用语言描述): 这是我的数据帧

df8=pd.DataFrame({'names':[['Hans','Meier'],['Debby','Harry','Peter']]})
    names
 0 ['Hans','Meier']
 1 ['Debby','Harry','Peter']

df9=pd.DataFrame({'caller':['Hans','Meier','Debby','Harry','Peter'],'text':[['hi im hans'],['hi im meier'],['hi im debby'],['hi im harry'],['hi im peter']]})
df9.set_index(df9.caller, inplace = True)
df9.drop('caller', axis = 1, inplace = True)

 caller     text
 Hans        ['hi im hans']
 Meier       ['hi im meier']
 .
 .
 .

结果应该是这样的

      names                  content
0 ['Hans','Meier']          ['hi im hans', 'hi im meier']
1 ['Debby','Harry','Peter'] ['hi im debby', 'hi im harry', 'hi im peter']

因此,如果此人是相应姓名列表中的一个元素,则df9中的人员所说的文本将出现在df8中。你知道吗

我认为这是一个类似于this的问题 但我看不到解决办法

我查阅了关于连接、连接和合并的pandas文档,但也没有找到解决方案


Tags: dataframenameshipeterpdimcallermeier
3条回答

您可以在df9中查找值:

df8['contents'] = df8['names'].apply(lambda l: [df9['text'].loc[name] for name in l])

这里有一个方法

df9['text']=df9['text'].str[0]

l=[df9.loc[x,'text'].tolist() for x in df8.names]
Out[505]: [['hi im hans', 'hi im meier'], ['hi im debby', 'hi im harry', 'hi im peter']]

df9['cont']=l

使用^{}

d=df9.set_index('caller')['text']
df8=df8.assign(content=df8.names.apply(lambda x:[d.get(i) for i in x]))
print(df8)

                   names                                        content
0          [Hans, Meier]                  [[hi im hans], [hi im meier]]
1  [Debby, Harry, Peter]  [[hi im debby], [hi im harry], [hi im peter]]

相关问题 更多 >

    热门问题