如何从对应的字符串列表映射数据帧中的字符串

2024-04-24 19:55:23 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个带有特定列Tweet的数据帧:

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

还有另一个数据帧B,结构如下:

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

有没有一种方法可以将数据帧a的字符串映射到数据帧B,这样每当有字符串匹配时,来自转换列的单词就会根据TWEET列中的ORIGIN列替换相应的字符串?我期望的结果是:

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

谢谢你的帮助。多谢各位


Tags: 数据字符串origintweetdiajadikamumengajak
2条回答

这可能对你有帮助

我用数据为您的场景创建了两个数据帧

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']

假设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

相关问题 更多 >