当前位置: 首页 > 面试题库 >

Pandas左外连接多个列上的多个数据框

宋铭
2023-03-14
问题内容

我是使用DataFrame的新手,我想知道如何在一系列表的多个列上执行等效于左外部联接的SQL

例:

df1: 
Year    Week    Colour    Val1 
2014       A       Red      50
2014       B       Red      60
2014       B     Black      70
2014       C       Red      10
2014       D     Green      20

df2:
Year    Week    Colour    Val2
2014       A     Black      30
2014       B     Black     100
2014       C     Green      50
2014       C       Red      20
2014       D       Red      40

df3:
Year    Week    Colour    Val3
2013       B       Red      60
2013       C     Black      80
2013       B     Black      10
2013       D     Green      20
2013       D       Red      50

本质上,我想做类似以下SQL代码的操作(注意df3在Year上没有加入):

SELECT df1.*, df2.Val2, df3.Val3
FROM df1
  LEFT OUTER JOIN df2
    ON df1.Year = df2.Year
    AND df1.Week = df2.Week
    AND df1.Colour = df2.Colour
  LEFT OUTER JOIN df3
    ON df1.Week = df3.Week
    AND df1.Colour = df3.Colour

结果应如下所示:

Year    Week    Colour    Val1    Val2    Val3
2014       A       Red      50    Null    Null
2014       B       Red      60    Null      60
2014       B     Black      70     100    Null
2014       C       Red      10      20    Null
2014       D     Green      20    Null    Null

我曾尝试使用合并和联接,但无法弄清楚如何在多个表上以及涉及多个联接时执行此操作。有人可以帮我吗?

谢谢


问题答案:

合并他们在两个步骤,df1df2第一,然后那到结果df3

In [33]: s1 = pd.merge(df1, df2, how='left', on=['Year', 'Week', 'Colour'])

我从df3删除了year,因为您上次加入不需要它。

In [39]: df = pd.merge(s1, df3[['Week', 'Colour', 'Val3']],
                       how='left', on=['Week', 'Colour'])

In [40]: df
Out[40]: 
   Year Week Colour  Val1  Val2 Val3
0  2014    A    Red    50   NaN  NaN
1  2014    B    Red    60   NaN   60
2  2014    B  Black    70   100   10
3  2014    C    Red    10    20  NaN
4  2014    D  Green    20   NaN   20

[5 rows x 6 columns]


 类似资料:
  • 我有3个CSV文件。每个数据框都有第一列作为人的(字符串)名称,而每个数据框中的所有其他列都是该人的属性。 如何将所有三个CSV文档“连接”在一起,创建一个单个CSV,每行都具有该人字符串名称的每个唯一值的所有属性? Pandas中的函数指定我需要一个多索引,但是我对分层索引方案与基于单个索引进行连接有什么关系感到困惑。

  • 问题内容: 我有3个CSV文件。每个人都有第一列作为人物的(字符串)名称,而每个数据框中的所有其他列都是该人物的属性。 如何将所有三个CSV文档“连接”在一起以创建单个CSV,并且每一行都具有该人的字符串名称的每个唯一值的所有属性? 中的函数指定我需要一个多索引,但是我对层次化索引方案与基于单个索引进行联接有何关系感到困惑。 问题答案: 假设进口: John Galt的答案基本上是一项手术。如果我

  • 我有两个熊猫dfx和y,它们都有相同的3列abc(不可为null)。我需要创建一个新的df z,通过“从x减去与y的行完全相同的行”获得,即a 我该怎么做呢?陷入了索引,协调,合并,加入,... 例子:

  • 从bugu-mongo 2.11版本开始,支持连接到多个数据库。 在前面的示例代码中,我们都只是连接到一个数据库: //默认的数据库连接 BuguConnection conn = BuguFramework.getInstance().createConnection(); conn.setHost("192.168.0.100"); conn.setPort(27017); conn.setU

  • 问题内容: 我在不同的列中有数据,但是我不知道如何提取数据以将其保存在另一个变量中。 如何选择然后将其保存到df1中? 我试过了 似乎没有任何工作。 问题答案: 列名(字符串)无法按照你尝试的方式进行切片。 在这里,你有两个选择。如果从上下文中知道要切出哪些变量,则可以通过将列表传递给语法来仅返回那些列的视图。 或者,如果需要对它们进行数字索引而不是按其名称进行索引(例如,你的代码应在不知道前两列

  • 问题内容: 我有2个数据框: restaurant_ids_dataframe 和 restaurant_review_frame 我想使用熊猫中的DataFrame.join()命令将这两个DataFrame加入一个单一的数据框中。 我尝试了以下代码行: 但是,当我尝试这样做时,出现以下错误: 我对熊猫很陌生,不知道就执行join语句而言我在做什么错。 任何帮助将非常感激。 问题答案: 您可以使