pandas - 数据框将一些列与一系列相乘

标签 pandas

我有一个数据框 df1,其中索引是 DatetimeIndex,有 5 列:col1、col2、col3、col4、col5。

我有另一个 df2,它具有几乎相同的日期时间索引(df1 中可能缺少某些天的 df1)和单个“值”列。

当日期相同时,我想将 df1 就地乘以 df2 的值。但不适用于所有列 col1...col5,仅适用于 col1...col4

我可以看到可以将 col1*Value 相乘,然后将 col2*Value 相乘,依此类推...并组成一个新的数据帧来替换 df1。

有没有更有效的方法?

最佳答案

您可以通过重新索引第二个数据帧以使它们具有相同的形状,然后使用数据帧运算符mul来实现此目的:

创建两个具有日期时间序列的数据框。第二个仅使用工作日来确保两者之间有差距。将日期设置为索引。

import pandas as pd
# first frame
rng1 = pd.date_range('1/1/2011', periods=90, freq='D')
df1 = pd.DataFrame({'value':range(1,91),'date':rng1})
df1.set_index('date', inplace =True)

# second frame with a business day date index
rng2 = pd.date_range('1/1/2011', periods=90, freq='B')
df2 = pd.DataFrame({'date':rng2}) 
df2['value_to_multiply'] = range(1-91)
df2.set_index('date', inplace =True)

使用第一帧的索引重新索引第二帧。 Df1 现在将在非工作日中留有间隙,并用之前的第一个有效观察值来填充。

# reindex the second dataframe to match the first
df2 =df2.reindex(index= df1.index, method = 'ffill')

将 df2 乘以 df1['value_to_multiply_by']:

# multiple filling nans with 1 to avoid propagating nans
# nans can still exists if there are no valid previous observations such as at the beginning of a dataframe 
df1.mul(df2['value_to_multiply_by'].fillna(1), axis=0)

关于pandas - 数据框将一些列与一系列相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28384544/

相关文章:

python - 从 csv 文件逐 block 读取和反转数据并复制到新的 csv 文件

python - Pandas - 删除多列中的重复项

python - Pandas - 为什么分块 'on' 的 read_csv 比没有分块的小文件更快?

python - 找到矩阵中的最大值以最大化分数

python - 一旦达到特定值,就删除高于特定值的行

python - 使用 issubset 比较两个 pandas 数据框列之间的设置值

Python Dataframe 从一行的另一列的每个列表元素中减去一列的值

python - 创建数据框副本的简单方法是什么

python-3.x - 如何使用 Pandas 按降序和时间按升序对日期进行排序

python - 匹配 pandas 列中列表和列表之间的相似元素