Python 效率:删除具有相同时间戳的行,同时保留该时间戳第二列的中位数

Python 效率:删除具有相同时间戳的行,同时保留该时间戳第二列的中位数,python,pandas,numpy,bigdata,Python,Pandas,Numpy,Bigdata,我想做的是: “角度”列每秒跟踪了大约20个角度(可能会有所不同)。但是我的“时间”时间戳的精度只有1s(因此总是约20行具有相同的时间戳)(数据帧中的总行数超过100万)。 我的结果将是一个新的数据帧,每一行都有一个变化的时间戳。时间戳的角度应为该间隔内~20个时间戳的中间值 我的想法是: 我遍历这些行并检查时间戳是否已更改。 如果是这样,我选择所有时间戳,直到它改变,计算中值,并将其附加到一个新的数据帧。 尽管如此,我有很多大数据文件,我想知道是否有更快的方法来实现我的目标 现在我的代码如下

我想做的是: “角度”列每秒跟踪了大约20个角度(可能会有所不同)。但是我的“时间”时间戳的精度只有1s(因此总是约20行具有相同的时间戳)(数据帧中的总行数超过100万)。 我的结果将是一个新的数据帧,每一行都有一个变化的时间戳。时间戳的角度应为该间隔内~20个时间戳的中间值

我的想法是: 我遍历这些行并检查时间戳是否已更改。 如果是这样,我选择所有时间戳,直到它改变,计算中值,并将其附加到一个新的数据帧。 尽管如此,我有很多大数据文件,我想知道是否有更快的方法来实现我的目标

现在我的代码如下(见下文)。 这不是很快,我想一定有更好的方法来处理熊猫/小矮人(或其他什么?)


您可以在此处使用
groupby
。下面,我制作了一个简单的虚拟数据帧

import pandas as pd
df1 = pd.DataFrame({'time': [1,1,1,1,1,1,2,2,2,2,2,2],
                   'angle' : [8,9,7,1,4,5,11,4,3,8,7,6]})

df1

  time  angle
0   1   8
1   1   9
2   1   7
3   1   1
4   1   4
5   1   5
6   2   11
7   2   4
8   2   3
9   2   8
10  2   7
11  2   6
df2 =  pd.DataFrame(df1.groupby('time')['angle'].median())
df2 = df2.reset_index()
df2

    time angle
0   1     6.0
1   2     6.5
然后,我们按时间戳分组,取该组中角度列的中值,并将结果转换为数据帧

import pandas as pd
df1 = pd.DataFrame({'time': [1,1,1,1,1,1,2,2,2,2,2,2],
                   'angle' : [8,9,7,1,4,5,11,4,3,8,7,6]})

df1

  time  angle
0   1   8
1   1   9
2   1   7
3   1   1
4   1   4
5   1   5
6   2   11
7   2   4
8   2   3
9   2   8
10  2   7
11  2   6
df2 =  pd.DataFrame(df1.groupby('time')['angle'].median())
df2 = df2.reset_index()
df2

    time angle
0   1     6.0
1   2     6.5

您可以使用分组后的
.agg
功能根据列选择操作

df1.groupby('Time', as_index=False).agg({"angle":"median"})