pandas数据帧中所有值的随机对

时间:2017-05-26 14:54:45

标签: python python-2.7 pandas random

    lat name
0   0   a
1   1   a
2   2   a
3   3   a
4   4   b
5   5   b
6   6   b
7   7   b

输出是:

  name  pairing sum
0   a   0,3      3
1   a   2,1      3
2   b   6,4      10
3   b   7,5      12

现在,我想要做的是在每个名称类型中,创建随机配对并将它们添加到一起。但是,所有行都需要成为随机配对的一部分。

所以理想的输出看起来像是:

Connection:keep-alive

然而,重要的是没有a与b配对,并且所有值都只是一对。

我该如何做到这一点?

1 个答案:

答案 0 :(得分:0)

一个选项是创建一个列作为组变量,然后通过 name pair 聚合结果组:

import pandas as pd
# use random permutation with modulo division to generate the pair group variable
def random_pairs(x):
    return pd.np.random.permutation(pd.np.arange(len(x)))//2
​
df['pair'] = df.groupby('name').lat.transform(random_pairs)

(df.groupby(['name', 'pair']).lat
 .agg({'pairing': lambda x: ', '.join(x.astype(str)), 'sum': 'sum'})
 .reset_index('pair', drop=True).reset_index())

#name  sum  pairing
#0  a    1     0, 1
#1  a    5     2, 3
#2  b    9     4, 5
#3  b   13     6, 7