【问题标题】:Concatenating/Merging List of Dataframes by Predefined columns按预定义列连接/合并数据框列表
【发布时间】:2015-04-02 06:23:00
【问题描述】:

我有以下数据框列表:

import pandas as pd
rep1 = pd.DataFrame.from_items([('Probe', ['x', 'y', 'z']), ('Gene', ['foo', 'bar', 'qux']), ('RP1',[1.00,23.22,11.12])], orient='columns')
rep2 = pd.DataFrame.from_items([('Probe', ['x', 'y', 'z']), ('Gene', ['foo', 'bar', 'qux']), ('RP2',[11.33,31.25,22.12])], orient='columns')
rep3 = pd.DataFrame.from_items([('Probe', ['x', 'y', 'z']), ('Gene', ['foo', 'bar', 'qux'])], orient='columns')
tmp = []
tmp.append(rep1)
tmp.append(rep2)
tmp.append(rep3)

# In actuality the DF could be more than 3.

产生:

In [53]: tmp
Out[53]:
[  Probe Gene    RP1
 0     x  foo   1.00
 1     y  bar  23.22
 2     z  qux  11.12,   Probe Gene    RP2
 0     x  foo  11.33
 1     y  bar  31.25
 2     z  qux  22.12,   Probe Gene
 0     x  foo
 1     y  bar
 2     z  qux]

我想要做的是连接该数据框列表,以便它产生这样的结果:

  Probe Gene      RP1        RP2
0     x  foo     1.00      11.33
1     y  bar    23.22      31.25
2     z  qux    11.12      22.12

请注意,rep3 仅包含两列。在连接的过程中,我们希望自动丢弃它。

我尝试使用此代码但无济于事。正确的做法是什么?

In [57]: full_df = pd.concat(tmp,axis=1).fillna(0)

In [58]: full_df
Out[58]:
  Probe Gene    RP1 Probe Gene    RP2 Probe Gene
0     x  foo   1.00     x  foo  11.33     x  foo
1     y  bar  23.22     y  bar  31.25     y  bar
2     z  qux  11.12     z  qux  22.12     z  qux

【问题讨论】:

  • 连接意味着将它们放在一起并保留所有内容。你所描述的听起来更像是加入。您在加入时阅读了the documentation 吗?
  • @BrenBarn:合并需要两个数据框作为输入。但我的问题是输入是数据帧列表(2 个或更多)
  • 您可能会发现this question 很有用。您可以将 Probe 和 Gene 列设置为索引,然后使用concat,如图所示。

标签: python pandas


【解决方案1】:

我不确定这是正确的方法,但一种巧妙的方法是使用reduce

In [11]: reduce(pd.merge, tmp)
Out[11]:
  Probe Gene    RP1    RP2
0     x  foo   1.00  11.33
1     y  bar  23.22  31.25
2     z  qux  11.12  22.12

这基本上相当于:

tmp[0].merge(tmp[1]).merge(tmp[2])...

注意:这意味着如果 tmp 中有很多 DataFrame,它可能不如使用 concat 高效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 2020-04-08
    • 1970-01-01
    • 2019-06-26
    • 2017-05-25
    • 2015-11-16
    • 2019-02-16
    相关资源
    最近更新 更多