【问题标题】:Arithmetic Operation for a Dataframe and Series with Unmatched Index in PythonPython中索引不匹配的数据框和序列的算术运算
【发布时间】:2021-03-04 20:22:40
【问题描述】:

我正在数据框和系列之间进行一些算术运算,但我不理解输出。鉴于系列中的第二项 (e) 等于 1,有人可以解释为什么我在 e 列下得到 3.0、6.0、9.0 和 12.0 而不是 1.0、4.0、7.0 和 10.0。

frame = pd.DataFrame(np.arange(12.).reshape((4, 3)), columns=list('bde'), index=['Utah', 'Ohio', 'Texas', 'Oregon'])

         b   d   e
Utah    0.0 0.0 0.0
Ohio    3.0 3.0 3.0
Texas   6.0 6.0 6.0
Oregon  9.0 9.0 9.0

series2 = pd.Series(range(3), index=['b', 'e', 'f'])

b    0
e    1
f    2
dtype: int64

frame + series2

      b   d   e   f
Utah 0.0 NaN 3.0 NaN
Ohio 3.0 NaN 6.0 NaN
Texas 6.0 NaN 9.0 NaN
Oregon 9.0 NaN 12.0 NaN

【问题讨论】:

  • 你试过打印frame的输出吗?
  • 是的。就是frame下的chunk。
  • 不,它们不一样。
  • 这很奇怪。我又试了一次。我仍然得到相同的输出。你能告诉我你得到了什么吗?

标签: python pandas dataframe


【解决方案1】:

让我们从实际上包含的内容开始:

          b     d     e
Utah    0.0   1.0   2.0
Ohio    3.0   4.0   5.0
Texas   6.0   7.0   8.0
Oregon  9.0  10.0  11.0

因此,当您将 series2 添加到 frame 时,对于 frame 中的每一行:

  • 首先在当前行和 series2 中的元素,
  • 然后进行添加。

也许更容易说出每列发生了什么:

  1. b(来自frame中的行)与元素b对齐 系列2。它包含0,所以加法的结果是一样的 如列b

  2. e(来自frame中的行)包含2.05.08.0 em> 和 11.0。当您添加 1(来自 series2 的值,索引 == "e"), 结果比原始值大一。

  3. dfNaN 填充,因为它们只出现 在源对象之一中(d 仅在 frame 中,f 仅在 series2 中)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    相关资源
    最近更新 更多