在不考虑零的情况下合并熊猫中的数据帧

时间:2020-05-27 23:00:36

标签: python pandas algorithm dataframe merge

我有两个不同的数据帧。 第一个具有以下形式:

"start time"  "end time" "Value1 " "Value2 "
     12:00     12:01       0         0
     12:01     12:02       1         2
     12:02     12:03       3         4

第二个具有以下格式。

    "start time"  "end time" "Value1 " "Value2 "
     12:00          12:01       0         0
     12:01          12:02       1         6
     12:02          12:03       0         0

对于两个数据帧,如果Value1为0,则Value 2也为零。 (从值2到值1同样适用)

开始时间和停止时间之间的差异始终为1分钟,并且两个数据帧的行数均相同。 (全天或1440行)

现在我要做的是组合这些数据帧而不考虑0。因此正确的合并数据具有以下格式

        "start time"  "end time" "Value1_1 " "Value2_1 " "Value1_2 " "Value2_2 "
          12:01          12:02       1         2            1         6

我在做什么

    df = pd.merge(df1, df2, left_index=True, right_index=True, how='outer')

这根本不会忽略0行。所以我想为什么不先合并它们,然后摆脱0值。这不是一个聪明的方法,但是会做到的。 我想知道是否有更好的方法?

1 个答案:

答案 0 :(得分:0)

如果需要,可以在单个DataFrame上合并查询结果。不过,我不确定它是否更优雅或更有效。您的方法似乎也不错。

df = pd.merge(
    df1.where(df1['Value 1'] != 0),
    df2.where(df2['Value 1'] != 0),
    left_index = True,
    right_index = True,
    how = 'outer')

由于它是外部联接,它将包含一个DataFrame中的值为零而不是另一个DataFrame的记录。如果切换到inner,则只能包含df1和df2都包含给定分钟的非零值的记录。