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配对,并且所有值都只是一对。
我该如何做到这一点?
答案 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