Как я могу заменить каждое слово с 3 значениями из другого кадра данных - PullRequest
2 голосов
/ 06 мая 2019

Запутанный заголовок, позвольте мне объяснить.У меня есть два кадра данных df1 и df2:

df1 выглядит так:

id `  text                                 
1     Hello world how are you people     
2     Hello people I am fine  people    
3     Good Morning people               
4     Good Evening                      

df2 выглядит так

Word      count         Points         Percentage

hello        2             2              100
world        1             1              100
how          1             1              100
are          1             1              100
you          1             1              100
people       3             1              33.33
I            1             1              100
am           1             1              100
fine         1             1              100
Good         2             -2            -100
Morning      1             -1            -100
Evening      1             -1            -100

df2 содержит каждое & каждое слово по одному разу df1, и им даны три значения count points percentage.

Сначала я хочу заменить каждое слово df1 на count points percentage.Например: строка

Hello world how are you people станет такой 2 2 100 1 1 100 1 1 100 1 1 100 1 1 100 1 1 100

Потому что Hello = 2 2 100 world = 1 1 100 вот так.

Ожидаетсявывод ::

id `  text                                 
1      2 100 1 1 100 1 1 100 1 1 100 1 1 100 1 1 100
2     2 2 100 3 1 33.33 1 1 100 1 1 100 1 1 100 3 1 33.33 
3     2 -2 -100 1 -1 -100 3 1 33.33            
4     2 -2 -100 1 -1 -100  

Ответы [ 2 ]

2 голосов
/ 06 мая 2019

Сначала объедините все значения с помощью join, а затем используйте apply с пониманием значений карты, преобразованных в нижний регистр:

s = (df2.assign(Word=df2['Word'].str.lower())
       .set_index('Word')[["count","Points","Percentage"]]
       .astype(str)
       .apply(' '.join, axis=1))


df1['text'] = df1['text'].str.lower().apply(lambda x: ' '.join(s.get(y) for y in x.split()))
print (df1)
   id                                               text
0   1  2 2 100.0 1 1 100.0 1 1 100.0 1 1 100.0 1 1 10...
1   2  2 2 100.0 3 1 33.33 1 1 100.0 1 1 100.0 1 1 10...
2   3                  2 -2 -100.0 1 -1 -100.0 3 1 33.33
3   4                            2 -2 -100.0 1 -1 -100.0
0 голосов
/ 06 мая 2019

Может быть, что-то вроде этого.

Надеюсь, это поможет вам.

Я только что сделал это для первого предложения.

df1=pd.DataFrame(columns=["text"],data=["Hello world how are you people"])
df2=pd.DataFrame(columns=["Word","count","Points","Percentage"],
                 data=[
                     ["hello",2,2,100],
                     ["world",1,1,100],
                      ["how",1,1,100],
                      ["are",1,1,100],
                      ["you",1,1,100],
                      ["people",3,1,33.33],
                 ])

Для каждого предложения в df1 для каждого слова выберите «count», «Points», «Percentage» из df2 и добавьте его в строку.

for i,row in df1.iterrows():
    new_string=""

    for word in row["text"].split(" "):
        values_from_df2=list(df2.loc[df2["Word"]==word.lower()][["count","Points","Percentage"]].values[0])
        new_string += ' '.join(str(int(e)) for e in values_from_df2)+" "

    row["text"] = new_string

Результат:

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