python - 将三列之间的数学运算结果附加到下一行

标签 python pandas

因此,我有以下 Pandas DataFrame,其中第三列(比率)中的所有值都相同:

import pandas as pd 

df = pd.DataFrame([[2, 10, 0.5], 
                   [float('NaN'), 10, 0.5], 
                   [float('NaN'), 5, 0.5]], columns=['Col1', 'Col2', 'Ratio'])
╔══════╦══════╦═══════╗
║ Col1 ║ Col2 ║ Ratio ║
╠══════╬══════╬═══════╣
║ 2    ║   10 ║ 0.5   ║
║ NaN  ║   10 ║ 0.5   ║
║ NaN  ║    5 ║ 0.5   ║
╚══════╩══════╩═══════╝

我想知道是否有一种方法可以将 Col1 * Ratio 相乘,然后将该乘积的输出添加到 Col2 并使用 pandas 提供的函数将值附加到下一行 Col1。

输出示例:

╔══════╦══════╦═══════╗
║ Col1 ║ Col2 ║ Ratio ║
╠══════╬══════╬═══════╣
║ 2    ║   10 ║ 0.5   ║
║ 11   ║   10 ║ 0.5   ║
║ 15.5 ║    5 ║ 0.5   ║
╚══════╩══════╩═══════╝

最佳答案

我认为numba如果性能很重要,这里就是如何使用循环的方式:

from numba import jit

@jit(nopython=True)
def f(a, b, c):
    for i in range(1, a.shape[0]):
        a[i] = a[i-1] * c[i-1] + b[i-1]
    return a

df['Col1'] = f(df['Col1'].to_numpy(), df['Col2'].to_numpy(), df['Ratio'].to_numpy())
print (df)
   Col1  Col2  Ratio
0   2.0    10    0.5
1  11.0    10    0.5
2  15.5     5    0.5

关于python - 将三列之间的数学运算结果附加到下一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60528836/

相关文章:

python - 如何使用 worker 初始化时使用的变量启动 celery worker

python - 将数字四舍五入到小数点后四位数

python - matplotlib.pyplot.draw() 和 matplotlib.pyplot.show() 没有效果

python - pandas 从另一个 DataFrame 获取值和位置并制作一系列

python - 添加两列,即mean_a 和 mean_b

python - 根据某一列中的值从 DataFrame 中选择行

python - 使用按钮 Tkinter 创建新的输入框

python - Django 和 FeinCMS : A way to use the Media Library in other normal models?

python - 寻找提高使用 Pandas 库的 python 脚本速度的方法

python - 来自另一个数据框的 Pandas 多索引分配