按两列分组,忽略对的顺序

时间:2018-12-07 03:17:44

标签: python python-3.x pandas dataframe group-by

假设我们有一个看起来像这样的数据框:

    start   stop   duration
0   A       B      1
1   B       A      2
2   C       D      2
3   D       C      0

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

所需的输出:[[start,stop,count,avg duration]]

在此示例中:[[A,B,2,1.5],[C,D,2,1]]

2 个答案:

答案 0 :(得分:1)

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

agg

答案 1 :(得分:0)

在一行中,这也可以通过

df.apply(lambda x: x.append(pd.Series(','.join([str(x) for x in sorted(x[['start', 'stop']])]))), axis=1).groupby([0]).duration.agg(['count', 'mean'])

结果:

     count  mean
0               
A,B      2   1.5
C,D      2   1.0