有没有一种方法可以按其值对数据框进行分组?

时间:2020-06-12 17:54:23

标签: python pandas dataframe

我有以下数据框:

Out[56]: 
   input  on_time
0      2      1.1
1      4      2.2
2      8      3.4
3      5      3.5
4      6      6.2
5     11      8.4
6     13      8.4

on_time是我实际代码中的时间戳。我想将具有on_time值彼此接近(在彼此的可配置范围内)的输入分组,并将它们添加到数据帧(on_time值是两者中的最高者)。这将导致以下数据帧:

Out[60]: 
   input  on_time
0      2      1.1
1      4      2.2
2      8      3.4
3      5      3.5
4      6      6.2
5     11      8.4
6     13      8.4
7    8/5      3.5
8  11/13      8.4

我认为我可以通过一些迭代和循环来做到这一点,但是有几种方法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

sort值,然后定义一些差异阈值,在此阈值以下将值分组。汇总列,以便我们加入“输入”,选择on_time列的最大值,并计算size,以便我们可以将子集仅包含具有多个值的组。最后concat的结果。

thresh = 0.2

df = df.sort_values('on_time')
grps = df['on_time'].diff().gt(0.2).cumsum()

res = (df.groupby(grps).agg(input=('input', lambda x: '/'.join(x.dropna().astype(str)), ),
                            on_time=('on_time', 'max'), 
                            size=('on_time', 'size')) 
         .query('size >= 2')
         .drop(columns='size'))

pd.concat([df, res], ignore_index=True)
#   input  on_time
#0      2      1.1
#1      4      2.2
#2      8      3.4
#3      5      3.5
#4      6      6.2
#5     11      8.4
#6     13      8.4
#7    8/5      3.5
#8  11/13      8.4