Python 是否有一种方法可以通过熊猫中的一组列值进行唯一分组?

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

我有一个数据框,其中包含五列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],
                    '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#排序,但也要移动与之关联的名称,我该怎么做?