如何合并数据框熊猫中的两行

Posted

技术标签:

【中文标题】如何合并数据框熊猫中的两行【英文标题】:How to merge two rows in a dataframe pandas 【发布时间】:2017-06-01 06:31:48 【问题描述】:

我有一个包含两行的数据框,我想将这两行合并为一行。 df 如下所示:

              PC           Rating CY   Rating PY    HT
0             DE101           NaN            AA     GV
0             DE101           AA+           NaN     GV

我尝试创建两个单独的数据框并将它们与 df.merge(df2) 组合但没有成功。结果应该如下

              PC           Rating CY   Rating PY    HT
0             DE101           AA+            AA     GV

有什么想法吗?提前致谢 df.update 可能是一种解决方案吗?

编辑:

df.head(1).combine_first(df.tail(1))

这适用于上面的示例。但是,对于包含数值的列,这种方法不会产生所需的输出,例如对于

              PC           Rating CY   Rating PY    HT    MV1   MV2
0             DE101           NaN            AA     GV    0     20 
0             DE101           AA+           NaN     GV    10    0

输出应该是:

              PC           Rating CY   Rating PY    HT   MV1    MV2
0             DE101           AA+            AA     GV   10     20

上面的公式没有对最后两列的值求和,而是取数据框第一行的值。

              PC           Rating CY   Rating PY    HT   MV1    MV2
0             DE101           AA+            AA     GV   0     20

如何解决这个问题?

【问题讨论】:

【参考方案1】:

您可以将max 与转置一起使用

In [2103]: df.max().to_frame().T
Out[2103]:
      PC Rating CY Rating PY  HT MV1 MV2
0  DE101       AA+        AA  GV  10  20

【讨论】:

【参考方案2】:

您可以在将DF 分成两部分后使用DF.combine_first() 方法,其中前半部分的空值将替换为另一半的有限值,同时保持其他有限值不变:

df.head(1).combine_first(df.tail(1))
# Practically this is same as → df.head(1).fillna(df.tail(1))


如果存在混合数据类型的列,则将它们划分为组成 dtype 列,然后通过将它们链接起来对其执行各种操作是可行的。

obj_df = df.select_dtypes(include=[np.object])
num_df = df.select_dtypes(exclude=[np.object])

obj_df.head(1).combine_first(obj_df.tail(1)).join(num_df.head(1).add(num_df.tail(1)))

【讨论】:

谢谢,这适用于上面的例子。但是,如果有额外的带有数值的列,则无法正确组合行,请参阅我的帖子的编辑 我已经更新了我的帖子。由于您没有提到数据框中存在数值,因此我假设您只想用底行更新顶行,以防发现任何空值。 非常感谢!另一种方法是将最后两列中的 0 值替换为 NaN,然后​​应用您建议的第一个论坛

以上是关于如何合并数据框熊猫中的两行的主要内容,如果未能解决你的问题,请参考以下文章

可以使用比较来合并两个熊猫数据框吗?

如何根据合并的数据框之一的两列的值在熊猫数据框中添加值

如何通过在两行之间划分特定列中的值并保持其他列不变来在熊猫数据框中创建新行?

如何从熊猫数据框中的当前行中减去前一行并将其应用于每一行;不使用循环?

熊猫数据框列和行中的拆分列表

如何与熊猫数据框中的键和键列表合并