我有一个逐组对象
ref query_x query_y
ANN00118-RA Charonia_GIQZ01011680.1.p1 Typhlosyrinx_Contig7942.p1
ANN00127-RA Charonia_GIQZ01023156.1.p1 Typhlosyrinx_Contig11188.p1
ANN00130-RA Charonia_GIQZ01000168.1.p1 Typhlosyrinx_Contig15281.p1
数据按列"0"分组;ref";。碰巧许多行具有相同的引用,例如
test.get_group('ANN12010-RA')
query_x ref query_y
0 Charonia_GIQZ01000001.1.p1 ANN12010-RA Typhlosyrinx_Contig13935.p1
1 Charonia_GIQZ01000001.1.p1 ANN12010-RA Typhlosyrinx_Contig13936.p1
2 Charonia_GIQZ01000001.1.p1 ANN12010-RA Typhlosyrinx_TRINITY_DN17744_c0_g2_i1.p1
3 Charonia_GIQZ01000001.1.p1 ANN12010-RA Typhlosyrinx_TRINITY_DN18267_c0_g1_i1.p2
如您所见,第二列具有相同的值ANN12010-RA,我想打印每个";ref";块在其自己的文件中,在一行上。示例的预期输出
ANN12010-RA Charonia_GIQZ01000001.1.p1 Typhlosyrinx_Contig13935.p1 Charonia_GIQZ01000001.1.p1 Typhlosyrinx_Contig13936.p1 Charonia_GIQZ01000001.1.p1 Typhlosyrinx_TRINITY_DN17744_c0_g2_i1.p1 Charonia_GIQZ01000001.1.p1 Typhlosyrinx_TRINITY_DN18267_c0_g1_i1.p2
元素的顺序并不重要。每行的列数可能会有所不同,我不知道每组有多少元素。
实现这一目标的最佳方式是什么?知道groupby对象可能长达数千行。
非常感谢
使用答案我得到这个
group_df.head()
index 0 1 2 3 4 5 6 7 8 9 ... 845 846 847 848 849 850 851 852 853 854
ref
ANN12010-RA Charonia_GIQZ01000001.1.p1 Typhlosyrinx_Con... Charonia_GIQZ01000001.1.p1 Typhlosyrinx_Con... Charonia_GIQZ01000001.1.p1 Typhlosyrinx_TRI... Charonia_GIQZ01000001.1.p1 Typhlosyrinx_TRI... Charonia_GIQZ01000001.1.p1 Typhlosyrinx_TRI...
ref元素应该是行的一个元素,或者至少我应该能够打印它(我认为这是可能的(。唯一剩下的问题是,列是由成对的值组成的,而不是由单个值组成的。作为输出,我想打印一个每行有一个元素的文件。好吧,我可以使用awk将2列的输出转换为1列的输出,但我想我会用Python来计算。
我希望我的输出文件的名称为";ref";,所以在这里,我的输出实际上是一个带有单列的单个文件,该文件将命名为ANN12010-RA。
这有道理吗。
我很难在我的端上测试这一点,因为没有代码可以让你的数据在我的一端随意使用。
不过,我相信这可能会奏效:
# Same should work for your 'test' DF as a whole if you remove the .get_group(...) method below.
# Though it is unclear the format of 'test' from your question, so not sure.
group_df = test.get_group('ANN12010-RA').reset_index()
# If either column is not already str, you should convert:
group_df['query_x'] = group_df['query_x'].astype(str)
group_df['query_y'] = group_df['query_y'].astype(str)
# Make a "Joined" column for the queries. You can change ' ' to whatever you'd like.
group_df['joined'] = group_df[['query_x', 'query_y']].agg(' '.join, axis=1)
# Pivot the DF to display all on one line.
group_df = group_df.pivot(index='ref', columns='index', values='joined')
试试看,让我知道它是如何为你工作的。
编辑:关于输出,我想对所有与同一行上显示的相同"ref"匹配的元素进行分组。简单地说(第一个元素是为组服务的引用(
ANN12010-RA Charonia_GIQZ01000001.1.p1 Typhlosyrinx_Con... Charonia_GIQZ01000001.1.p1 Typhlosyrinx_Con... Charonia_GIQZ01000001.1.p1 Typhlosyrinx_TRI... Charonia_GIQZ01000001.1.p1 Typhlosyrinx_TRI... Charonia_GIQZ01000001.1.p1 Typhlosyrinx_TRI...
但是作为data.frame对象,我可以很容易地导出到csv文件。