【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

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章