如何对多列进行分组并汇总熊猫中的数据

时间:2019-11-08 16:38:44

标签: python pandas pandas-groupby

我有一个带有几列(words, start time, stop time, speaker)的pandas数据框:

  • 我想合并word列中的所有值,而data列中的值不变,或者meta_data列中的值不变。
  • 此外,我想保留组合中第一个单词的start值和最后一个单词的stop值。

我目前有:

      word  start  stop     data    meta_data  
0      but   2.72  2.85        2      9
1   that's   2.85  3.09        2      9
2  alright   3.09  3.47        2      1
3    we'll   8.43  8.69        1      4
4     have   8.69  8.97        1      4
5       to   8.97  9.07        1      4
6     okay   9.19 10.01        2      2
7     sure  10.02 11.01        2      1
8    what?  11.02 12.00        1      4

但是,我想将其转换为:

       word       start  start  data  meta_data
0  but that's      2.72   3.09     2    9
1  alright         3.09   3.47     2    1
2  we'll have to   8.43   9.07     1    4
3  okay            9.19  10.01     2    2
4  sure            10.02 11.01     2    1
5  what?           11.02 12.00     1    4

2 个答案:

答案 0 :(得分:3)

这需要创建一个帮助键,然后我们clear + shift根据该键创建组密钥

cumsum

答案 1 :(得分:2)

在这里做一些数学运算 + GroupBy.agg

s=df['data']+df['meta_data']
groups=s.ne(s.shift()).cumsum()
new_df=( df.groupby(groups)
           .agg({'word':' '.join,'start':'min',
                 'stop':'max','data':'first',
                 'meta_data':'first'}) )
print(new_df)

            word  start   stop  data  meta_data
1     but that's   2.72   3.09     2          9
2        alright   3.09   3.47     2          1
3  we'll have to   8.43   9.07     1          4
4           okay   9.19  10.01     2          2
5           sure  10.02  11.01     2          1
6          what?  11.02  12.00     1          4

如果您认为总和可以分为两个不同且连续的组,则可以使用稍微复杂一点的带小数的函数

p=(df['data']+0.1723).pow(df['meta_data']+2.017)
groups=p.ne(p.shift()).cumsum()