将表中的组拆分为其子组的表

时间:2019-06-18 19:13:23

标签: python pandas blast

我有一个已经根据第一列分组的表。我想将表拆分为仅具有相应第二列的子表。我想在python中使用pandas或其他东西。我不希望使用“ awk”,因为这将需要我进行“子处理”或“ os”。最后,我实际上只需要根据第一列分开的第二列中的条目。该表的大小可以是大约10000行X 6列。

这些是我发现的类似帖子,但我不知道如何针对我的目的对其进行修改。 Split pandas dataframe based on groupby

Splitting groupby() in pandas into smaller groups and combining them

我拥有的表/数据框如下:

P0A910  sp|A0A2C5WRC3|  84.136  0.0        100
P0A910  sp|A0A068Z9R6|  73.816  0.0         99
Q9HVD1  sp|A0A2G2MK84|  37.288  4.03e-34    99
Q9HVD1  sp|A0A1H2GM32|  40.571  6.86e-32    98
P09169  sp|A0A379DR81|  52.848  2.92e-117   99
P09169  sp|A0A127L436|  49.524  2.15e-108   98

我希望将其拆分如下

group1:

P0A910  A0A2C5WRC3
P0A910  A0A068Z9R6

group2:

Q9HVD1  A0A2G2MK84
Q9HVD1  A0A1H2GM32

group3:

P09169  A0A379DR81
P09169  A0A127L436

或进入列表

P0A910:

A0A2C5WRC3
A0A068Z9R6

Q9HVD1:

A0A2G2MK84
A0A1H2GM32

P09169:

A0A379DR81
A0A127L436

2 个答案:

答案 0 :(得分:0)

因此,您的问题是分隔字符串。是您想要的吗?

new_col = df[1].str[3:-1]
list(new_col.groupby(df[0]))

答案 1 :(得分:0)

因此,我设法获得了某种解决方案。在此解决方案中,我设法删除了第二个中的前缀,并在熊猫中使用groupby将条目按第一列分组。然后,遍历它,并将每个组分别写入csv文件。我从@Quang的答案以及此link中获得帮助。可能可以用更好的方法完成,但这是我的代码:

{ 
    "key": "ctrl+alt+oem_5",
    "command": "editor.action.jumpToBracket",
    "when": "editorTextFocus" 
},

更新-删除了除感兴趣的列之外的所有列。这是先前代码的延续

import pandas as pd

#read .csv as dataframe
data=pd.read_csv("BlastOut.csv")

#truncates sp| | from second column (['B']).
new_col=data['B'].str[3:-1]

#replaces second column with new_col
data['B']=new_col.to_frame(name=None) 

#groups dataframe by first column (['A'])
grouped=data.groupby('A')             

#loops through grouped items and writes each group to .csv file with title 
#of group ([group_name].csv)
for group_name, group in grouped:
    group.to_csv('Out_{}.csv'.format(group_name))