Skip to main content
 首页 » 编程设计

python pandas dataframe groupby 将同一组放在一起

2025年05月04日15kenshinobiy

我有一个 Pandas 数据框df:

df = pd.DataFrame(data = {'v1': ['b', 'b', 'c', 'a', 'd', 'c', 'd', 'c', 'f', 'e'],  
                          'v2': ['a', 'a', 'd', 'b', 'c', 'e', 'c', 'd', 'g','c'], 
                          'v3': [3.3, 2.9, 3.5, 4.7, 5.1, 1.1, 2.3, 3.4, 4.7, 6.1]}) 
    v1  v2  v3 
0   b   a   3.3 
1   b   a   2.9 
2   c   d   3.5  
3   a   b   4.7 
4   d   c   5.1 
5   c   e   1.1 
6   d   c   2.3 
7   c   d   3.4 
8   f   g   4.7 
9   e   c   6.1 

我想生成的结果如下:

    v1  v2  v3 
0   b   a   3.3 
1   b   a   2.9 
3   a   b   4.7 
2   c   d   3.5  
4   d   c   5.1 
6   d   c   2.3 
7   c   d   3.4 
5   c   e   1.1 
9   e   c   6.1 
8   f   g   4.7 

即,堆叠具有相同对的 v1 和 v2 的行。

v1 = a, v2 = b 和 v1 = b, v2 = a 不相等(我们不能交换 v1 和 v2) 但它们被认为在同一组中。我怎样才能做到?

感谢任何帮助!

请您参考如下方法:

以类似的方式,使用argsort:

df.iloc[pd.Series( 
    [tuple(x) for x in np.sort(df.iloc[:, :2], axis=1)]).argsort() 
] 
 
  v1 v2   v3 
0  b  a  3.3 
1  b  a  2.9 
3  a  b  4.7 
2  c  d  3.5 
4  d  c  5.1 
6  d  c  2.3 
7  c  d  3.4 
5  c  e  1.1 
9  e  c  6.1 
8  f  g  4.7