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

2024-07-02 11:06:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个已经根据第一列分组的表。我想将表拆分为子表,只包含相应的第二列。我想在python中使用pandas或其他东西。我不喜欢使用“awk”,因为这将需要我“subprocess”或“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

我想把它分成以下几部分

第1组:

^{pr2}$

第二组:

Q9HVD1  A0A2G2MK84
Q9HVD1  A0A1H2GM32

第3组:

P09169  A0A379DR81
P09169  A0A127L436

或列在列表中

P0A910:

A0A2C5WRC3
A0A068Z9R6

问题9HVD1:

A0A2G2MK84
A0A1H2GM32

P09169号:

A0A379DR81
A0A127L436

Tags: pandasspsubprocessgroupbyawk子表a0a2c5wrc3p0a910
2条回答

所以你的问题是把绳子分开。这是你想要的:

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

所以我设法找到了某种解决办法。在这个解决方案中,我设法删除了第二列中的前缀,并使用pandas中的groupby将条目按第一列分组。然后,循环使用它并将每个组分别写入csv文件。我得到了@Quang的回答和这个link的帮助。也许可以用更好的方法来完成,但我的代码是:

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))  

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

^{pr2}$

相关问题 更多 >