【问题标题】:using pandas find out repeated string elements from multi-index series dataframe使用 pandas 从多索引系列数据框中找出重复的字符串元素
【发布时间】:2022-01-12 17:14:45
【问题描述】:

在 Pandas 数据框中,我拥有的一列是系列数据类型,即 food_column,我必须从该列中提取输出列

   Input : food_column
 [ 'bread','bread','bread'] ,
 [ 'meat','butter','butter'] ,
 [ 'meat', 'butter','bread','meat']
        ['butter']
 ['bread','meat','bread','meat']

Output : main_column
       ['bread']
       ['butter']
        ['meat']
       ['butter']
       ['bread']

条件:

  1. 如果任何字符串元素重复多次,则应将其选为输出元素,
  2. 如果任何两个或三个元素计数相同,则应从这两个或三个元素中选择 np.random.choice
  3. 如果任何行中只有一个元素,则将该元素分配/映射到输出列
  4. 否则将其标记为“未知”以输出列

【问题讨论】:

    标签: python pandas for-loop series multi-index


    【解决方案1】:
    import pandas as pd
    import random
    from collections import Counter
    import numpy as np
    
    food_list = [[ 'bread','bread','bread'] ,
     ['meat','butter','butter'] ,
     ['meat', 'butter','bread','meat'],
     ['butter'],
     ['bread','meat','bread','meat'],
     ['']]
    
    food_series = pd.Series(food_list)
    
    df = pd.DataFrame({'food_column': food_series})
    
    # randomize list item order, since dict item order is constant in Python 3.6+ 
    df['random_food_list'] = [random.sample(z, len(z)) for z in df['food_column'].to_list()]
    # get counts
    df['food_counts'] = df['random_food_list'].apply(lambda x: Counter(x))
    # get key with max value
    df['main_column'] = df['food_counts'].apply(lambda x:  max(x, key=x.get))
    # replace empty strings with 'unknown'
    df['main_column'] = np.where(df['main_column'] == '', 'unknown', df['main_column'])
    

    【讨论】:

    • 感谢您的回复,但 food_list 列是系列格式而不是列表
    • 我编辑了我的答案以说明您的系列。对于未来,您应该让人们更容易复制您的数据。您的问题包含无效的数据结构。尝试使用df.to_dict() 并将其粘贴到您的问题中。此外,您可以在系列上使用.to_list() 来获取列表或将列表分配给系列。
    • 请原谅输入错误的语法,数据采用数据框格式,列名称为 food_column ,数据框类型在 pandas.core.series.Series ['bread','bread','bread '] ['肉','黄油','黄油'] ['肉','黄油','面包','肉'] ['黄油'] ['面包','肉','面包', '肉'] ['']
    猜你喜欢
    • 1970-01-01
    • 2018-07-26
    • 2018-08-16
    • 1970-01-01
    • 2018-07-15
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    相关资源
    最近更新 更多