我想做以下合并(很难用文字描述):这是我的数据
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的问题,但我看不出解决办法
我查看了熊猫关于连接、加入和合并的文档,但也没有找到解决方案。
发布于 2019-06-20 15:49:14
这里有一条路
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发布于 2019-06-20 15:45:45
您可以在df9中查找值
df8['contents'] = df8['names'].apply(lambda l: [df9['text'].loc[name] for name in l])发布于 2019-06-20 15:48:59
使用s.get
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]]https://stackoverflow.com/questions/56689519
复制相似问题