【问题标题】:combining dataframes in Pandas without considering zeros在 Pandas 中组合数据帧而不考虑零
【发布时间】:2020-09-15 03:37:42
【问题描述】:

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

"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 值。这不是一个聪明的方法,但它会做到的。 我想知道是否有更好的方法来做到这一点?

【问题讨论】:

    标签: python pandas algorithm dataframe merge


    【解决方案1】:

    如果需要,您可以合并单个 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 中的值为零。如果切换到内部,则只能包含 df1 和 df2 在给定分钟内包含非零值的记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多