import pandas as pddf = pd.DataFrame({ 'LeafID':[1,1,2,3,6,5,1],'pIDx':[10,10,300,30,40,20,45,20],'pIDy':[20,400,15,12,43,54,112,23],'count':[10,80,50,70],'score':[10,22,4,9,1]})LeafID count pIDx pIDy score0 1 10 10 20 101 1 20 10 20 102 2 30 300 400 103 1 40 10 20 224 3 80 30 15 225 3 10 40 20 36 1 20 20 12 47 6 50 10 43 58 3 30 20 54 99 5 10 45 112 010 1 70 20 23 1
我想做一个groupby,然后过滤pIDx大于2的行.
也就是说,过滤pIDx为10和20的行.
我尝试使用df.groupby(‘pIDx’).count()但它没有帮助我.同样对于那些行,我必须做0.4 *计数0.6 *得分.
期望的输出是:
LeafID count pIDx pIDy final_score 1 10 10 20 1 20 10 20 1 40 10 20 6 50 10 43 1 20 20 12 3 30 20 54 1 70 20 23解决方法 您可以在
boolean indexing
和 isin
中使用 value_counts
: df = pd.DataFrame({ 'LeafID':[1,1]})print (df) LeafID count pIDx pIDy score0 1 10 10 20 101 1 20 10 20 102 2 30 300 400 103 1 40 10 20 224 3 80 30 15 225 3 10 40 20 36 1 20 20 12 47 6 50 10 43 58 3 30 30 54 99 5 10 45 112 010 1 70 20 23 1s = df.pIDx.value_counts()IDx = s[s>2].indexprint (df[df.pIDx.isin(IDx)]) LeafID count pIDx pIDy score0 1 10 10 20 101 1 20 10 20 103 1 40 10 20 227 6 50 10 43 5
时序:
np.random.seed(123)N = 1000000L1 = List('abcdefghijklmnopqrstu')L2 = List('efghijklmnopqrstuvwxyz')df = pd.DataFrame({'LeafID':np.random.randint(1000,size=N),'pIDx': np.random.randint(10000,'pIDy': np.random.choice(L2,N),'count':np.random.randint(1000,size=N)})print (df)print (df.groupby('pIDx').filter(lambda x: len(x) > 120))def jez(df): s = df.pIDx.value_counts() return df[df.pIDx.isin(s[s>120].index)]print (jez(df))In [55]: %timeit (df.groupby('pIDx').filter(lambda x: len(x) > 120))1 loop,best of 3: 1.17 s per loopIn [56]: %timeit (jez(df))10 loops,best of 3: 141 ms per loopIn [62]: %timeit (df[df.groupby('pIDx').pIDx.transform('size') > 120])10 loops,best of 3: 102 ms per loopIn [63]: %timeit (df[df.groupby('pIDx').pIDx.transform(len) > 120])1 loop,best of 3: 685 ms per loopIn [64]: %timeit (df[df.groupby('pIDx').pIDx.transform('count') > 120])10 loops,best of 3: 104 ms per loop
对于final_score,您可以使用:
df['final_score'] = df['count'].mul(.4).add(df.score.mul(.6))总结
以上是内存溢出为你收集整理的python – 在groupby pandas之后过滤行全部内容,希望文章能够帮你解决python – 在groupby pandas之后过滤行所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)