Как отобразить строку в кадре данных из соответствующего списка строк - PullRequest
0 голосов
/ 05 марта 2020

предположим, у меня есть этот фрейм данных A с определенным столбцом Tweet:

TWEET
-----
kamu ngajak gelut
dtnggu kedatangannya
dia jadi pampir

И есть еще один фрейм данных B, структурированный так:

ORIGIN            TRANSFORMED 
-----------------------------
ngajak             mengajak
dtnggu             ditunggu
pamir              vampir

Есть ли способ отобразить строки от кадра данных A к кадру данных B, поэтому при совпадении строки слова из столбца TRANSFORMED заменяют соответствующую строку на основе столбца ORIGIN в столбце TWEET? Мой желаемый результат:

TWEET
-----
kamu mengajak gelut
ditunggu kedatangannya
dia jadi vampir

Любая помощь приветствуется. Спасибо.

Ответы [ 2 ]

2 голосов
/ 05 марта 2020

Это может вам помочь.

Я создал два кадра данных для вашего сценария с вашими данными.

df1:

data = '''kamu ngajak gelut dtnggu kedatangannya dia jadi pampir'''
df1 = pd.DataFrame({'TWEET': [data]})

df2:

   ORIGIN TRANSFORMED
0  ngajak    mengajak
1  dtnggu    ditunggu
2  pampir      vampir

Код:

for or_word in df2['ORIGIN'].values.tolist():
    if any(df1['TWEET'].str.contains(or_word)):
        transformed_word = df2['TRANSFORMED'].iloc[df2.index[df2['ORIGIN'] == or_word].tolist()[0]]
        print(transformed_word)
        df1['TWEET'] = df1['TWEET'].str.replace(or_word, transformed_word)

Выход:

['kamu mengajak gelut ditunggu kedatangannya dia jadi vampir']
2 голосов
/ 05 марта 2020

Предполагая, что ORIGIN столбец имеет уникальные значения .


In [88]: bstr = r''' 
    ...: ORIGIN TRANSFORMED 
    ...: ngajak             mengajak 
    ...: dtnggu             ditunggu 
    ...: pamir              vampir'''                                                                                                                                             

In [89]: astr = r''' 
    ...: TWEETS 
    ...: kamu ngajak gelut 
    ...: dtnggu kedatangannya 
    ...: dia jadi pampir'''                                                                                                                                                       

In [90]: dfa = pd.read_table(io.StringIO(astr), sep='\\n', engine='python')                                                                                                       

In [91]: dfb = pd.read_table(io.StringIO(bstr), sep='\\s+')                                                                                                                       

In [92]: def replace(word, lookup_df, search_col, ans_col): 
    ...:     match = lookup_df[search_col] == word 
    ...:     if match.any(): 
    ...:         return lookup_df[match][ans_col].values[0] 
    ...:     else: 
    ...:         return word 
    ...:                                                                                                                                                                          

In [93]: dfa['TWEETS'] = dfa['TWEETS'].apply(lambda row: ' '.join([replace(word, dfb, 'ORIGIN', 'TRANSFORMED') for word in row.split(' ')]))                                      

In [94]: dfa                                                                                                                                                                      
Out[94]: 
                   TWEETS
0     kamu mengajak gelut
1  ditunggu kedatangannya
2         dia jadi pampir

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...