所以我把前面的一个问题缩小到了这个范围:我有一个类似这样的数据帧
id temp1 temp2
9 10.0 True False
10 10.0 True False
11 10.0 False True
12 10.0 False True
17 15.0 True False
18 15.0 True False
19 15.0 True False
20 15.0 True False
21 15.0 False False
33 27.0 True False
34 27.0 True False
35 27.0 False True
36 27.0 False False
40 31.0 True False
41 31.0 False True
.
.
.
实际上,它有几百万行长(还有其他一些列)。你知道吗
我现在做的是
grouped = coinc.groupby('id')
final = grouped.filter(lambda x: ( x['temp2'].any() and x['temp1'].any()))
lanif = final.drop(['temp1','temp2'],axis = 1 )
(coinc是数据帧的名称)
只有当temp1和temp2中的某些具有相同id的行都为true时,它才保留行(按id分组)。例如,对于上面的数据帧,它将删除具有id 15的行,但保留其他所有行。你知道吗
然而,这是致命的缓慢,我想知道是否有一个更快的方法来做到这一点。你知道吗
问题不在于groupby,而在于lambda。Lambda操作没有矢量化*。使用agg可以更快地得到相同的结果。我会做:
*这是一个非常微妙的问题,我认为过于简单化了,抱歉。你知道吗
在这里使用
filter
和lambda函数会大大降低速度。你可以通过移除它来加快速度。你知道吗在更大的框架上比较这个方法。你知道吗
相关问题 更多 >
编程相关推荐