'объединить' 2 кадра данных с элементами из списка? - двойной ключ - PullRequest
1 голос
/ 21 июня 2019

Это дополнительные вопросы для этого 'объединить' 2 кадра данных для элементов из списка? Расширение состоит в том, что теперь некоторые имена могут дублироваться в 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[], но ошибка осталась постоянной

1 Ответ

1 голос
/ 22 июня 2019

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...