'merge' 2 dataframes on elements from list?

前端 未结 4 1252
刺人心
刺人心 2021-01-23 06:20

I want to do the following merge (hard to describe in words): This are my Dataframes

df8=pd.DataFrame({\'names\':[[\'Hans\',\'Meier\'],[\'Debby\',\'Harry\',\'Pet         


        
相关标签:
4条回答
  • 2021-01-23 06:48

    Using 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]]
    
    0 讨论(0)
  • 2021-01-23 06:59

    You can lookup the values in df9:

    df8['contents'] = df8['names'].apply(lambda l: [df9['text'].loc[name] for name in l])
    
    0 讨论(0)
  • 2021-01-23 07:02

    df8['content']= df8['names'].apply(lambda x: [df9.loc[name,'text'][0] for name in x])

    This return an error if there is a name that isn't found in df9. You can make it more robust with

    df8['content']= df8['names'].apply(lambda x: [df9['text'].get(name)[0] if df9['text'].get(name) else None for name in x])

    This will have a list that contains the text for every name found, and None for any name not found.

    If all you're using df9 for is as a look-up table, then it would be more appropriate to store it as a dictionary, in which case it would be

    df8['content']= df8['names'].apply(lambda x: [my_dict.get(name)[0] if my_dict.get(name) else None for name in x])

    0 讨论(0)
  • 2021-01-23 07:07

    Here is one way

    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
    
    0 讨论(0)
提交回复
热议问题