Как я могу умножить слова с числами в DataFrame? - PullRequest
2 голосов
/ 03 октября 2019

У меня есть DataFrame, подобный этому:

print(df.words[0])
[('replacement', 1), ('shaver', 2)]

print(df.words[1])
[('filter', 2), ('purifier', 1), ('please', 2)]

Я хочу создать новый столбец с именем "all_words". Столбец, должен представлять реальные строки, а не числа.

('head', 3) should be: "head,head,head"

Требуемый вывод из примера:

print(df.all_words[0])
'replacement, shaver, shaver'


print(df.all_words[1])
'filter, filter, purifier, please, please'

Ответы [ 4 ]

3 голосов
/ 03 октября 2019

Вам понадобится apply функция для объединения кортежей в одну строку.

df['all_words'] = df.words.apply(lambda x: ', '.join(', '.join([y[0]] * y[1]) for y in x))
2 голосов
/ 03 октября 2019

Вы можете сделать это с df.apply()

import pandas as pd

df = pd.DataFrame({'words' : [[('replacement', 1), ('shaver', 2)], [('filter', 2), ('purifier', 1), ('please', 2)]]})

def word_to_words(row):
    words_string = ''
    for tuple_set in row['words']:
        words_string += (tuple_set[0] + ', ') * tuple_set[1]
    return(words_string)

df['all_words'] = df.apply(word_to_words, axis=1)
1 голос
/ 03 октября 2019

Вы можете использовать применить :

df = pd.DataFrame(data=[[[('filter', 2), ('purifier', 1), ('please', 2)]]], columns=['words'])
result = df.words.apply(lambda x: ', '.join(word for word, count in x for _ in range(count)))
print(result)

Выход

0    filter, filter, purifier, please, please
Name: words, dtype: object
0 голосов
/ 03 октября 2019

Это просто решить тугой цикл И его работы .. Если слова - это список из нескольких кортежей

words = [[('replacement', 2), ('shaver', 2) ], [('filters', 2), ('purifier',1), ('plears', 3) ]]
Loop = words[0] #here you use indexing of words[0] or [1] both
Result = ()
for val in Loop:
    v = tuple([val[0] * 1 for _ in range(val[1])])
    Result = Result + v
Print(Result) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...