Python ';合并';列表中元素上的2个数据帧?
我想进行以下合并(难以用语言描述): 这是我的数据帧Python ';合并';列表中元素上的2个数据帧?,python,pandas,list,merge,Python,Pandas,List,Merge,我想进行以下合并(难以用语言描述): 这是我的数据帧 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']
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中
我认为这是一个类似的问题
但我看不出有什么解决办法
我查阅了pandas关于连接、联接和合并的文档,但也没有找到解决方案您可以在
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
df8['content']=df8['names'].apply(lambda x:[df9.loc[name,'text'][0]表示x中的名称))
如果在df9
中找不到名称,则返回错误。您可以使用
df8['content']=df8['names'].apply(lambda x:[df9['text'].get(name)[0]如果df9['text'])。get(name)else None for name in x])
这将有一个列表,其中包含找到的每个名称的文本,以及未找到的任何名称的None
如果您所使用的df9
for只是作为一个查找表,那么将其存储为字典会更合适,在这种情况下
df8['content']=df8['names'].apply(lambda x:[my_dict.get(name)[0]如果my_dict.get(name)在x中的name没有其他值])
@user11638654这是假设调用者
是一列,根据提供的数据帧,我使用了原始df,没有设置索引和drop等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']])
到目前为止,这是有效的,但我如何将df8.contents添加到字符串列表中(如问题中)请参见@WeNYoBen的答案:)@user1163868454啊,happy Coding如果你能帮助跟进,那就太好了
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['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