Python panda将groupby对象中的每个组打印为一行



我有一个逐组对象

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文件。

最新更新