【问题标题】:How to repeat a word based on its frequency of occurrence in a row with multiple words in python?python - 如何根据单词在python中连续出现多个单词的频率来重复单词?
【发布时间】:2018-07-26 14:45:08
【问题描述】:

我正在处理一个数据集。它的第一行如下所示:

Column1 Column2

1 [食物=3,派对=2,....] 2 [海洋=2, 鱼=3, 冲浪=2,....] . ..................... . ..................... . .....(第 1 列有序列号,第 2 列有频率单词列表。)

每一行都有多个单词,它们各自的频率。

我想将 column2 转换如下:

[食物,食物,食物,聚会,聚会.....]等等。

我觉得很难,不知道从哪里开始。我尝试了标记化,但不知道如何继续。

【问题讨论】:

  • 你的数据格式是什么?那是字符串列表吗?数据框?字典?
  • 这是一个熊猫数据框
  • 那么请相应地表示您的数据。不清楚“food”和“party”是列名还是字段值。
  • 您好,已更改。很抱歉给您带来不便。

标签: python pandas csv


【解决方案1】:

假设你从一个字符串列表开始,你可以这样做:

dataset = [
    ['food=3', 'party=2'],
    ['word=2', 'apple=3'],
]

def multiply_word(item):
    word, freq = item.split('=')
    return [word] * int(freq)

result = [
    sum((multiply_word(item) for item in row), [])
    for row in dataset
]

result
# [
#     ['food', 'food', 'food', 'party', 'party'], 
#     ['word', 'word', 'apple', 'apple', 'apple']
# ]

或者您可以使用这个“单线”(受@jp_data_analysis 的回答启发):

[
    sum(
        ([word] * int(freq) for word, freq in (item.split('=') for item in row)),
        []
    )
    for row in dataset
]

如果每行中有很多单词,那么您可能应该使用itertools.chain 而不是sum。见why sum on lists is (sometimes) faster than itertools.chain?

【讨论】:

    【解决方案2】:

    这是一种方法。

    from itertools import chain
    
    data = [['food=3', 'party=2'],
            ['drink=5', 'sleep=1']]
    
    def repeater(lst):
        return list(chain(*([j[0]]*int(j[1]) for j in (i.split('=') for i in lst))))
    
    list(map(repeater, data))
    
    # [['food', 'food', 'food', 'party', 'party'],
    #  ['drink', 'drink', 'drink', 'drink', 'drink', 'sleep']]
    

    【讨论】:

      【解决方案3】:

      假设你的数据在一个列表中

      l=['food=3', 'party=2']
      
      s=pd.Series(l).str.split('=',expand=True)# split by sep `=`
      
      s.iloc[:,0].repeat(s.iloc[:,1].astype(int)).tolist()# using repeat 
      Out[549]: ['food', 'food', 'food', 'party', 'party']
      

      【讨论】:

        猜你喜欢
        • 2020-09-03
        • 1970-01-01
        • 1970-01-01
        • 2019-01-05
        • 2017-04-02
        • 2023-03-14
        • 1970-01-01
        • 2015-01-07
        相关资源
        最近更新 更多