【问题标题】:Multiply two pandas series with mismatched indices将两个索引不匹配的熊猫系列相乘
【发布时间】:2015-10-20 22:28:19
【问题描述】:

df创建了两个系列:s1s2

每个都有相同的长度但不同的索引。 s1.multiply(s2) 联合不匹配的索引而不是相乘。

我只想将 entrywise s1s2 相乘,忽略不匹配的索引。

我可以运行 s1.reset_index()s2.reset_index() 然后从这两个 dfs 中获取我想要的列,因为它将原始索引变成一个单独的列,但这很乏味,我认为可能有更简单的方法它。

s1.multiply(s2, axis='columns')

好像也不行

【问题讨论】:

  • 你可以转换成一个numpy数组,它会忽略values的索引:s1.values.mul(s2.values)
  • 感谢约翰,这确实可以使系列的值相乘。不幸的是,它将系列转换为 numpy 数组。您是否知道一种使用系列来保持整个过程的方法,而不是移动到 numpy 数组,然后再回到系列( result = pandas.Series(s1.values*s2.values) )?
  • s1 * s2.values 应该可以工作
  • 这取决于您希望索引是什么。您的建议将产生一个新的 [0,1,2...] 索引,而 Ed 的建议将使用来自 s1 的索引
  • 啊,好的。谢谢约翰和埃德。这两个都涵盖了我需要的解决方案。

标签: python pandas series indices multiplication


【解决方案1】:

我认为使用reset_index() 是一种方式,但可以选择删除索引,而不是将其推回数据框。

像这样:

s1 = pd.Series([1,2,3,4,5,6,7], index=[52,34,3,53,636,7,4])
52     1
34     2
3      3
53     4
636    5
7      6
4      7
dtype: int64

s1.reset_index(drop=True)
0    1
1    2
2    3
3    4
4    5
5    6
6    7
dtype: int64

我之所以喜欢 reset_index() 方法而不是其他建议的方法,即简单地乘以值

s1 * s2.values

是这不是很明确。此行并未告诉我您正在解决一个索引问题。

虽然这一行非常明确地说明了您正在解决索引问题:

s1.reset_index(drop=True) * s2.reset_index(drop=True)

或将其分解为多行:

s1.reset_index(inplace=True, drop=True)
s2.reset_index(inplace=True, drop=True)
s1 * s2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 2018-01-24
    • 1970-01-01
    • 2023-01-20
    • 2018-12-02
    • 2019-05-31
    相关资源
    最近更新 更多