【问题标题】:creating a matrix from multiple pandas data frames从多个熊猫数据框创建一个矩阵
【发布时间】:2021-04-10 16:27:15
【问题描述】:

我基本上没有使用 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 学习技巧!

【问题讨论】:

    标签: python pandas dataframe join


    【解决方案1】:

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

    输出:

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

    【讨论】:

    • 感谢一百万! “concat”是我想念的哈哈。这帮助了很多!
    【解决方案2】:

    这是另一种方法:

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

    【讨论】:

    • 谢谢!这正是我需要建立的!
    猜你喜欢
    • 2019-09-23
    • 2018-01-25
    • 2016-09-02
    • 2021-04-25
    • 2012-05-19
    • 2018-11-09
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    相关资源
    最近更新 更多