Groupby 两列忽略对的顺序

Cae*_*rus 6 python group-by dataframe pandas pandas-groupby

假设我们有一个如下所示的数据框:

    start   stop   duration
0   A       B      1
1   B       A      2
2   C       D      2
3   D       C      0
Run Code Online (Sandbox Code Playgroud)

构建以下列表的最佳方法是什么:i)开始/停止对;ii) 开始/停止对的计数;iii) 开始/停止对的平均持续时间?在这种情况下,顺序应该无关紧要:(A,B)=(B,A).

期望的输出: [[start,stop,count,avg duration]]

在这个例子中: [[A,B,2,1.5],[C,D,2,1]]

cs9*_*s95 7

sort前两列(您可以就地执行此操作,或创建副本并执行相同的操作;我已经完成了前者),然后groupbyagg

df[['start', 'stop']] = np.sort(df[['start', 'stop']], axis=1)

(df.groupby(['start','stop'])
   .duration
   .agg(['count', 'mean'])
   .reset_index()
   .values
   .tolist())
# [['A', 'B', 2, 1.5], ['C', 'D', 2, 1.0]]
Run Code Online (Sandbox Code Playgroud)