【问题标题】:Merging rows from different dataframes together将来自不同数据帧的行合并在一起
【发布时间】:2015-10-26 13:36:12
【问题描述】:

我有两个数据框:一个包含“名称”、“年份”和“类型”列,另一个包含不同的参数。有 4 种不同的类型,每种类型都有其特定的参数。现在我需要将它们合并在一起。

我的方法是使用 if 函数来找出“类型”。例如,在 df3 的第二行中,我的类型为“a”。 'a' 类型的参数在 df4 的第 3 行。我尝试使用以下代码将它们连接起来:

df3.ix[[2]]
s1 = df3.ix[[2]]
s2 = df4.ix[[3]]
result = pd.concat([s1, s2], axis=1)

我现在的问题是,参数位于单独的行中,而不是添加到第 2 行。是否有机会将它们合并到一行中?感谢您的回答!

【问题讨论】:

  • 发布两个 dfs 的原始输入数据、创建它们的代码和所需的输出,目前您的问题非常模糊
  • 我直接从两个不同的 excel 文件导入 dfs

标签: python pandas merge concat


【解决方案1】:

如果df3 有一个Type 列并且df4 有一个type 列,那么这两个DataFrames 可以合并

pd.merge(df3, df4, left_on='Type', right_on='type')

默认为an inner join


In [13]: df3
Out[13]: 
  Name  Year   Type
1    A  2012   boat
2    B  2013    car
3    C  2011  truck
4    D  2013   boat

In [14]: df4
Out[14]: 
    type  Parameter1  Parameter2  Parameter3
0   boat           2           8           7
1    car           1           9           3
2  truck           5           4           2

In [15]: pd.merge(df3, df4, left_on='Type', right_on='type')
Out[15]: 
  Name  Year   Type   type  Parameter1  Parameter2  Parameter3
0    A  2012   boat   boat           2           8           7
1    D  2013   boat   boat           2           8           7
2    B  2013    car    car           1           9           3
3    C  2011  truck  truck           5           4           2

请注意,如果列名完全匹配,则

pd.merge(df3, df4)

默认情况下会合并共同共享的列名。

【讨论】:

  • 有什么限制吗?导致它在超过 1800 行中的 265 行后停止
  • 你能构造一个例子来说明这个问题吗?合并数千行通常应该没有问题——最多你会在合并的 DataFrame 中得到数百万行(如果键有很多重复项)。只要您没有耗尽内存,pd.merge 应该会成功。
  • 你在循环调用pd.merge吗? (否则,你怎么知道它在 265 行之后停止?)你应该能够合并两个 DataFrame,只需要一次调用 pd.merge...。你看到了。
  • 不,我不使用循环。我的文件看起来像您答案中的一个示例,只有行和列。我的 df3 有 1858 行,那一行与 df4 合并,后者有 8 行。因此,我使用 `pd.merge(df3, df4, left_on='Type', right_on='type')'。到目前为止效果很好,它只在 265 行后停止,并且不会将 df4 中的参数与 df3 中的所有条目进行比较
  • 如果df3['Type'] 中的许多值在df4['type'] 中没有对应值,则可能会发生这种情况。例如,空格很重要。字符串 'boat '(有 4 个空格)与字符串 'boat'(没有空格)不匹配。您需要在df3 中找到没有被合并的行,并研究为什么它的Type 值不在df3['type'] 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
  • 2020-07-26
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多