Python 是否有一种方法可以通过熊猫中的一组列值进行唯一分组?
我有一个数据框,其中包含五列ID值和一些任意度量。ID值与特定项目的5名员工相关,但对于每个ID输入数据集的顺序没有标准。我想对5个ID的集合执行groupby,以便在组级别进行评估Python 是否有一种方法可以通过熊猫中的一组列值进行唯一分组?,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我有一个数据框,其中包含五列ID值和一些任意度量。ID值与特定项目的5名员工相关,但对于每个ID输入数据集的顺序没有标准。我想对5个ID的集合执行groupby,以便在组级别进行评估 In[1]: df1 = pd.DataFrame({'ID_1' : [1, 1, 1, 1], 'ID_2' : [2, 2, 4, 4], 'ID_3' : [3, 3, 2, 2], 'I
In[1]: df1 = pd.DataFrame({'ID_1' : [1, 1, 1, 1],
'ID_2' : [2, 2, 4, 4],
'ID_3' : [3, 3, 2, 2],
'ID_4' : [4, 5, 8, 8],
'ID_5' : [5, 4, 7, 7],
'some_metric' : [.7, .8, .2, .9]})
In[2]: print df1
Out[2]:
ID_1 ID_2 ID_3 ID_4 ID_5 some_metric
0 1 2 3 4 5 0.7
1 1 2 3 5 4 0.8
2 1 4 2 8 7 0.2
3 1 4 2 8 7 0.9
但是,由于原始数据集中ID的顺序不唯一,如果我对5个ID执行group by,我将得到三个组,而实际上只有两个唯一的组
In[3]: df1.groupby(['ID_1', 'ID_2', 'ID_3', 'ID_4', 'ID_5']).mean()
Out[3]:
ID_1 ID_2 ID_3 ID_4 ID_5 some_metric
1 2 3 4 5 0.70
5 4 0.80
4 2 8 7 0.55
是否有一种简单的方法可以根据列中的唯一值进行分组?或者有没有办法将数据提取到字典中,然后再返回到数据框中?要对多列中的项目的唯一组合进行分组,而不考虑顺序,并且不缺少值,
排序
值并将排序后的值分配回列。然后你可以清楚地分组。在本例中,我们使用numpy
,因为这是一种更快的排序方法
import numpy as np
cols = [f'ID_{i}' for i in range(1,6)]
df1[cols] = np.sort(df1[cols].to_numpy(), axis=1)
要对多列中的项目的唯一组合进行分组,而不考虑顺序,且不缺少值,
对值进行排序
并将排序后的值重新分配给列。然后你可以清楚地分组。在本例中,我们使用numpy
,因为这是一种更快的排序方法
import numpy as np
cols = [f'ID_{i}' for i in range(1,6)]
df1[cols] = np.sort(df1[cols].to_numpy(), axis=1)
如果列中有与每个ID相关联的名称以及名称{i},请发布您的预期输出。我想按ID#排序,但也要移动与其关联的名称,我应该怎么做?如果列中的每个ID都有关联的名称以及名称{I}。我想按ID#排序,但也要移动与之关联的名称,我该怎么做?