我有一个数据帧df1,其中索引是DatetimeIndex,有5列,col1,col2,col3,col4,col5。
我有另一个df2,它有一个几乎相等的datetimeindex(df1中可能缺少df1的某些天),还有一个“Value”列。
当日期相同时,我想将df1乘以df2的值。但不是所有列的col1。。。col5,只有col1。。。可乐
我可以看到有可能乘以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[“值乘以”]:
# 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 DataFrame中,我可以使用函数将列值与另一列进行匹配。 例如:假设我们有一个DataFrame: 和另一个DataFrame: 我可以使用的功能相匹配的列值对的列值 例如: 产量: PySpark DataFrame中的等效操作是什么? 上面的代码给我一条错误消息: 问题答案: 这种操作在spark中称为“左半联接”:
问题内容: 如何将数据框给定列的每个元素与标量相乘?(我曾尝试过寻找SO,但似乎找不到正确的解决方案) 做类似的事情: 给我警告: 注意:如果可能的话,我不想遍历数据框并执行类似的操作…因为我认为整个列上的任何标准数学运算都应该是可能的,而不必编写循环: 编辑 : 我正在跑步熊猫 完整跟踪: 问题答案: 经过一些研究,这是答案:
问题内容: 我有两个Series,并且索引相同(非连续)。如何合并并成为DataFrame中的两列,并将其中一个索引保留为第三列? 问题答案: 我认为这是个不错的方法。如果存在它们,则使用“系列”的名称属性作为列(否则,将它们简单地编号): 注意:这扩展到2个以上的系列。
问题内容: 因此,我已经初始化了一个空的熊猫DataFrame,并且希望将列表(或系列)作为行附加添加到此DataFrame中。最好的方法是什么? 问题答案: 有时候,在大熊猫之外进行所有附加操作会更容易,然后只需创建DataFrame即可。
问题内容: 我正在寻找有关如何在Python中将一个范围值转换为另一范围值的想法。我正在从事硬件项目,正在从可返回一定范围值的传感器读取数据,然后使用该数据来驱动需要不同范围值的执行器。 例如,假设传感器返回的值在1到512的范围内,并且执行器由5到10的值驱动。我想要一个函数,我可以传递一个值和两个范围并取回该值映射到第二个范围。如果这样的函数被命名,则可以这样使用: 在此示例中,我希望输出为,
问题内容: 我在尝试获取另一列中的字符串值的字符计数列时遇到问题,但还没有弄清楚如何有效地做到这一点。 显然,这涉及首先创建一个null列,然后将其重写,这对我的数据集要花费很长时间。那么获得这样的东西最有效的方法是什么 我已经检查了很多,但是还无法弄清楚。 问题答案: Pandas为此使用了矢量化字符串方法:。要创建新列,您可以编写: 例如: 这应该比使用Python循环在DataFrame上循