我有一个三列ID
的数据集,'sort_seq and
level . basically i want to identify id wise level sequence sort by sort_seq. please suggest any optimal code other then
for loop',因为它需要更长的时间与字典和追加列表。
输入数据集
import pandas as pd
import numpy as np
data = {'id': [1, 1, 1, 1,2, 2, 3, 3, 3, 3, 4, 5, 5, 6],
'sort_seq': [89, 24, 56, 8, 5, 64, 93, 88, 61, 31, 50, 75, 1, 81],
'level':['a', 'a', 'b', 'c', 'x', 'x', 'g', 'a', 'b', 'b', 'b', 'c', 'c','b']}
df = pd.DataFrame(data)
预期产出
尝试代码
collect = []
for ij in df.id.unique():
idict = {}
x = df[df['id'] == ij]
x = x.sort_values(by='sort_seq',ascending=True)
x = x.reset_index()
idict[ij] = x['level'].tolist()
collect.append(idict)
collect
2条答案
按热度按时间dm7nw8vv1#
首先按
DataFrame.sort_values
对两列进行排序,然后按level
中的连续值进行分组,计数器按Series.value_counts
,按level
的值连接计数数,因此可能按join
进行聚合:或者在理解中使用
itertools.groupby
和Counter
:tez616oj2#
验证码
产出:
与您想要的输出不同,您示例中的输出应为
id 3
的2b
。中级
组: