这是对此'merge' 2 dataframes on elements from list?的后续问题 扩展名是,现在某些名称可以在df8中加倍,以便能够区分各个文本,我创建了一个日期。
df8=pd.DataFrame({'Dates':['2017-12-14', '2017-12-14','2017-12-16'],'names':[['Hans','Meier'],['Debby','Harry'],['Hans','Harry']]})
df9=pd.DataFrame({'Date':['2017-12-14','2017-12-14','2017-12-14','2017-12-14','2017-12-14','2017-12-16','2017-12-16'],'caller':['Hans','Meier','Debby','Harry','Peter','Hans','Harry'],'text':[['hi im hans'],['hi im meier'],['hi im debby'],['hi im harry'],['hi im peter'],['my name is hans'],['my name is harry']]})
df9.set_index(df9.Date, inplace = True)
df9.drop('Date', axis = 1, inplace = True)
df9.head(10)
Date names text
2017-12-14 Hans [hi im hans]
2017-12-14 Meier [hi im meier]
2017-12-14 Debby [hi im debby]
2017-12-14 Harry [hi im harry]
2017-12-14 Peter [hi im peter]
2017-12-16 Hans [my name is hans]
2017-12-16 Harry [my name is harry]
结果应该是,如果某人在相应列表中,则该人在df9中所说的文本会出现在df8中,此外,名称和日期必须现在匹配
使输出为
Date names content
2017-12-14 ['Hans','Meier'] ['hi im hans', 'hi im meier']
2017-12-14 ['Debby','Harry',] ['hi im debby', 'hi im harry',]
2017-12-16 ['Hans', 'Harry'] ['my name is hans','my name is harry']
应用上一个问题的结果
df9['text']=df9['text'].str[0]
l=[df9.loc[x,'text'].tolist() for x in df8.names]
df8['cont']=l
产生此错误
“ [['Hans','Meier']]中都没有[index]“
这与日期索引有关,但是我不知道如何解决。
我在loc[]
上玩了一点,但是错误仍然持续存在
答案 0 :(得分:1)
IIUC,您可以执行以下操作:
展开df8
并分配给m
m=pd.DataFrame({'Dates':df8.loc[df8.index.repeat(df8.names.str.len()),'Dates'],
'names':np.concatenate(df8.names)})
然后,merge
和groupby
:
(m.merge(df9,left_on=['Dates','names'],right_on=['Date','caller']).
groupby('Dates')['text'].apply(sum).reset_index())
Dates text
0 2017-12-14 [hi im hans, hi im meier]
1 2017-12-15 [hi im debby, hi im harry]
2 2017-12-16 [my name is hans, my name is harry]