• 【pandas】按照数据列中元素出现的先后顺序进行分组排列(最后一种个人原创)


    部分原文:使用Pandas完成data列数据处理,按照数据列中元素出现的先后顺序进行分组排列 (qq.com)

    import pandas as pd
    df = pd.DataFrame({
    'data': ['A1', 'D3', 'B2', 'C4', 'A1', 'A2', 'B2', 'B3', 'C3', 'C4', 'D5', 'D3'],
    'new': ['A1', 'A1', 'D3', 'D3', 'B2', 'B2', 'C4', 'C4', 'A2', 'B3', 'C3', 'D5']})
    df
    # new列为data列分组排序后的结果

     

    # 方法一
    df = pd.DataFrame({'data':['A1', 'D3', 'B2', 'C4', 'A1', 'A2', 'B2', 'B3', 'C3', 'C4', 'D5', 'D3']})
    temp = df.drop_duplicates().reset_index(drop=True).values
    new_data = []
    length = temp.shape[0]
    for i in range(length):
        item = temp[i][0]
        list1 = df['data'].values.tolist()
        count = list1.count(item)
        new_data += [item] * count
    df['new1'] = new_data
    df

    略显啰嗦,不推荐

    # 方法二
    from collections  import Counter
    from itertools import chain
    df['new2'] = sum([[k]*v for k, v in Counter(df['data']).items()], [])
    df['new3'] = [*chain(*([k]*v for k, v in Counter(df['data']).items()))]
    df

    需要引入其他库

    # 方法3
    df['new4'] = df['data'].unique().repeat(df['data'].value_counts(sort=True)) # 改成True
    df

    # 自带方法,sort改成True,原链接文章错误False

    # 方法4
    df['new5'] = df['data'].astype('category').cat.reorder_categories(df['data'].unique()).sort_values().values
    df['new6'] = sorted(df['data'].tolist(), key=df['data'].tolist().index)
    
    df
    # 个人原创
    df['new7'] = sum([[i]*df.data.value_counts()[i] for i in df.data.drop_duplicates()],[])

    综合了方法1和方法2

  • 相关阅读:
    css3渐变色
    css3背景
    css3边框
    css3弹性盒子
    计算机概论
    中断和异常的处理与抢占式多任务
    分页机制和动态页面分配
    任务切换
    任务的隔离和特权级保护
    程序的动态加载和执行
  • 原文地址:https://www.cnblogs.com/hightech/p/16334118.html
Copyright © 2020-2023  润新知