如何合并数据帧pandas中的两行

时间:2017-01-17 09:08:19

标签: pandas dataframe merge

我有一个包含两行的数据框,我想将这两行合并为一行。 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

如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

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

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

enter image description here

包含混合数据类型的列,将它们分成它的成分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)))

enter image description here

答案 1 :(得分:3)

您可以将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