通过行值熊猫的某些组合计算行

通过行值熊猫的某些组合计算行,第1张

通过行值熊猫的某些组合计算行

我认为,在

v1
v2
没有
NaN
S,所以使用
transform
+
size

df = df[df.groupby(['v1', 'v2'])['v2'].transform('size') == 6]print (df)    v1  v2        v30    0 -30 -15.000001    0 -30  -7.500002    0 -30 -11.250003    0 -30 -13.125004    0 -30 -14.062505    0 -30 -13.593756    0 -10  -5.000007    0 -10  -7.500008    0 -10  -6.250009    0 -10  -5.6250010   0 -10  -5.9375011   0 -10  -6.09375

详情:

print (df.groupby(['v1', 'v2'])['v2'].transform('size') == 6)0      True1      True2      True3      True4      True5      True6      True7      True8      True9      True10     True11     True12    False13    False14    FalseName: v2, dtype: bool

不幸的

filter
是真的很慢,因此如果需要更好的性能,请使用
transform

np.random.seed(123)N = 1000000L = list('abcdefghijkl') df = pd.Dataframe({'v1': np.random.choice(L, N),        'v2':np.random.randint(10000,size=N),        'value':np.random.randint(1000,size=N),        'value2':np.random.randint(5000,size=N)})df = df.sort_values(['v1','v2']).reset_index(drop=True)print (df.head(10))In [290]: %timeit df.groupby(['v1', 'v2']).filter(lambda x: len(x) == 6)1 loop, best of 3: 12.1 s per loopIn [291]: %timeit df[df.groupby(['v1', 'v2'])['v2'].transform('size') == 6]1 loop, best of 3: 176 ms per loopIn [292]: %timeit df[df.groupby(['v1', 'v2']).v2.transform('count').eq(6)]10 loops, best of 3: 175 ms per loop

N = 1000000ngroups = 1000df = pd.Dataframe(dict(A = np.random.randint(0,ngroups,size=N),B=np.random.randn(N)))In [299]: %timeit df.groupby('A').filter(lambda x: len(x) > 1000)1 loop, best of 3: 330 ms per loopIn [300]: %timeit df[df.groupby(['A'])['A'].transform('size') > 1000]10 loops, best of 3: 101 ms per loop

警告

给定组数,结果不能解决性能问题,这对于其中一些解决方案的时序会产生很大影响。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5651134.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存