【问题标题】:How can I optimise this pandas workflow?如何优化此 pandas 工作流程?
【发布时间】:2020-11-16 13:05:56
【问题描述】:

此逻辑将应用于 BIG 数据,我确实需要优化速度并尽可能减少 RAM 使用量,并且我已尽我所能。

df = pd.DataFrame([['chr1',33329,17,'''33)'6'4?1&AB=?+..''','''X%&=E&!%,0("&"Y&!'''],
                    ['chr1',33330,15,'''6+'/7=1@><C1*'*''','''X%=E!%,("&"Y&&!'''],
                    ['chr1',33331,13,'''2*3A@/9@CC3--''','''X%E!%,("&"Y&!'''],
                    ['chr1',33332,16,'''4**(,:3)+7-@<(0-''','''X%&E&!%,0("&"Y&!'''],
                    ['chr1',33333,14,'''66(/C=*42A:.&*''','''X%=&!%0("&"&&!''']],
                 columns = ['chrom','pos','depth','phred','map'])

df['phred2'] = df.phred.apply(lambda x: sum(map(lambda x: x-33, map(ord, x))))
df['phred2'] = df.phred2/df.phred.str.len()
df.drop(columns=['phred'], inplace=True)
df['map2'] = df.map.apply(lambda x: sum(map(ord, x)))
df['map2'] = df.map2/df.map.str.len()
df.drop(columns=['map'], inplace=True)

df

chrom   pos depth   phred2  map2
0   chr1    33329   17  18.000000   47.000000
1   chr1    33330   15  18.533333   47.533333
2   chr1    33331   13  22.000000   47.230769
3   chr1    33332   16  15.125000   46.125000
4   chr1    33333   14  18.142857   42.642857

这个答案是我需要的。我只需要知道是否有更好/更快的方法。

谢谢!

【问题讨论】:

  • 我能得到一些关于为什么这被否决的反馈吗?我在这里尽力而为,似乎有点苛刻。

标签: python-3.x pandas optimization apply bioinformatics


【解决方案1】:

使用列表理解:

df['phred2'] = [(sum(map(ord,i))-len(i)*33)/len(i) for i in df["phred"]]
df["map2"] = [(sum(map(ord,i)))/len(i) for i in df["map"]]

  chrom    pos  depth              phred                map     phred2       map2
0  chr1  33329     17  33)'6'4?1&AB=?+..  X%&=E&!%,0("&"Y&!  18.000000  47.000000
1  chr1  33330     15    6+'/7=1@><C1*'*    X%=E!%,("&"Y&&!  18.533333  47.533333
2  chr1  33331     13      2*3A@/9@CC3--      X%E!%,("&"Y&!  22.000000  47.230769
3  chr1  33332     16   4**(,:3)+7-@<(0-   X%&E&!%,0("&"Y&!  15.125000  46.125000
4  chr1  33333     14     66(/C=*42A:.&*     X%=&!%0("&"&&!  18.142857  42.642857

50k 虚拟数据的性能:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多