繁体   English   中英

从多个 pandas 数据帧创建矩阵

[英]creating a matrix from multiple pandas data frames

我基本上没有使用 pandas 的经验,我正试图强迫自己更多地使用它。

我正在尝试根据特定列加入多个数据帧的“计数”以创建计数矩阵。 我通常使用旧的 python 字典来执行此操作,但如果有一种简单的方法可以使用 pandas 执行此操作,我会对学习感兴趣。

我有多个数据框。 它们的大小不相等。 GeneID 和geneName 基本上是一回事。 只是识别基因的方法不同。

我的数据框如下所示:

数据框1:

     geneID  geneName  count
0    A123    ABC       202
1    B456    DEF       30
2    C789    GHI       265

数据框2:

     geneID  geneName  count
0    X999    FOO       700
1    B456    DEF       606
2    C789    GHI       777

如果基因名称/基因 ID 不存在于任何数据框中,则矩阵文件中的计数值应为“0”。

这是加入计数后所需的结果:

     geneID  geneName  df1   df2   df3 ...
0    A123    ABC       202   0
1    B456    DEF       30    606
2    C789    GHI       265   777
3    X999    FOO       0     700

提前感谢任何解决方案,以及任何 pandas 学习技巧!

尝试pd.concat

pd.concat([d.set_index(['geneID','geneName']).rename(columns={'count':f'df{i}'})
           for i,d in enumerate([df1,df2])], axis=1
         ).fillna(0)

Output:

                   df0    df1
geneID geneName              
A123   ABC       202.0    0.0
B456   DEF        30.0  606.0
C789   GHI       265.0  777.0
X999   FOO         0.0  700.0

concat然后pivot_table

(pd.concat([d.assign(col=f'df{i}') for i,d in enumerate([df1,df2])])
   .pivot_table(index=['geneID','geneName'], columns='col', 
                values='count', fill_value=0)
)

或在concat中使用选项key的类似方法:

(pd.concat([df1,df2], keys=['df1','df2'])
   .reset_index(level=1,drop=True)
   .set_index(['geneID','geneName'],append=True)
   ['count']
   .unstack(level=0, fill_value=0)
)

这是另一种方法:

concatdict = {'df1':df1,'df2':df2}
df3 = pd.concat(concatdict).reset_index(level=1,drop=True).set_index(['geneID','geneName'],append=True)['count'].unstack(level=0).fillna(0).reset_index()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM