在pandas数据帧中,我想使用applymap(somefunction)
使用groupby
(使用一些列索引值),我发现这很难实现。你知道吗
mcve_01.txt
pos f1_index M1 M2 F1_x
16230484 141 G/G G/G G
16230491 141 C/C C/C C
16230503 141 T/T T/T T
16232072 211 A/A A/A A
16229783 211 C/C C/C G
16229992 211 A/A A/A G
16230007 211 T/T T/T A
16230011 263 G/G G/G C
16230049 263 A/A A/A T
我阅读了上面的文件,并将pos
和f1_index
设置为索引,其余的列值设置为列表:
mcve_data.set_index(['pos', 'index'], append= True, inplace = True)
mcve_list = mcve_data.applymap(lambda c:[list(c)])
所以,现在我想读两行(值),然后使用下面描述的函数创建这两个值的itertools.product
对zip
。我不确定这个函数是否有用,但希望它能帮助读者。
def mapfun(c):
if any(['.' in l for l in c]):
return '.'
if all(['|' in l for l in c]):
fun = zip
else:
fun = product
filt_set = set(['|','/'])
filt = partial(filter,lambda l: not (l in filt_set))
return ','.join('g'.join(t) for t in fun(*map(filt, c)))
最后的代码:我使用上面的函数,使用“mcve\u list+mcve”一次读取两行_列表.shift(1) :
mcve_mm = (mcve_list+mcve_list.shift(1)).dropna(how='all').\
applymap(mapfun)
这给了我(最终输出)比如:
pos index M1 M2 F1_x
16230484 141 CgG,CgG,CgG,CgG CgG,CgG,CgG,CgG CgG
16230491 141 TgC,TgC,TgC,TgC TgC,TgC,TgC,TgC TgC
..... ... TgT,TgT,TgT,TgT TgT,TgT,TgT,TgT TgT
我想解决的问题-这就是问题所在:
以上(函数代码)和最后的代码都很好,只是现在我想为每个f1_index
值分别运行函数。按组执行此操作不会在索引值更改时生成或压缩列表。你知道吗
我尝试过的事情:
重置f1_index
和groupby('f1\u index')
mcve_group = mcve_list.reset_index(level=['f1_index'])
mcve_group2 = mcve_group.groupby('f1_index')
for x, group in mcve_group2:
mcve_mm2 = (mcve_group2+mcve_group2.shift(1)).dropna(how='all').\
apply(mapfun)
此外,还有:
mcve_mm2 = (mcve_group2+mcve_group2.shift(1)).dropna(how='all').\
apply(lambda x: [mapfun(c) for c in x])
使用groupby('key')
mcve_mm = (mcve_list+mcve_list.shift(1)).groupby('f1_index').dropna(how='all').\
applymap(mapfun)
包装applymap
mcve_mm = (mcve_list+mcve_list.shift(1)).dropna(how='all').groupby(['f1_index'], group_keys = False).apply(lambda x: [mapfun])
我没有得到任何错误,但功能部分混乱时,试图分组,然后申请。你知道吗
我也没有找到任何使用applymap和groupby的例子和教程。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐