向新列中添加1个值,并与其他列一起对其执行操作

时间:2018-08-10 16:09:57

标签: python pandas dataframe operation

我有一个数据框,

scraped_info = {
 'prodname' : prodname,
 'price' : price,
 'description' : description,
 'img' : img,
 }

所以基本上公式是 new_col中的1个,我们首先设置1 *(1 + 3),然后设置4 *(1 + 4),然后设置20 *(1 + 3),依此类推。 我应该如何首先创建一个新列(new_col),然后在第一行添加1,然后执行计算。

2 个答案:

答案 0 :(得分:1)

cumprod

df.assign(new_col=df.z.fillna(0).add(1).cumprod())

     x    y    z  new_col
0  NaN  NaN  NaN      1.0
1  1.0  2.0  3.0      4.0
2  2.0  3.0  4.0     20.0
3  2.0  1.0  3.0     80.0

试图保留dtype

df.assign(new_col=df.z.fillna(0, downcast='infer').add(1).cumprod())

     x    y    z  new_col
0  NaN  NaN  NaN        1
1  1.0  2.0  3.0        4
2  2.0  3.0  4.0       20
3  2.0  1.0  3.0       80

和Numba一起

这一点是要说明如何执行依赖于线性路径的计算。 Numba的速度非常快,如果计算的时间复杂度为O(N),那么您不必担心在Numba中使用此循环。

如果您尚未安装numba,并且不想安装它,只需移除@njit装饰器。

from numba import njit

@njit
def f(a):
    out = np.zeros_like(a)
    out[0] = 1
    for i, x in enumerate(a[1:], 1):
        out[i] = out[i-1] * (1 + x)
    return out

df.assign(new_col=f(df.z.values))

     x    y    z  new_col
0  NaN  NaN  NaN      1.0
1  1.0  2.0  3.0      4.0
2  2.0  3.0  4.0     20.0
3  2.0  1.0  3.0     80.0

使用int

df.assign(new_col=f(df.z.fillna(0).astype(int).values))

     x    y    z  new_col
0  NaN  NaN  NaN        1
1  1.0  2.0  3.0        4
2  2.0  3.0  4.0       20
3  2.0  1.0  3.0       80

答案 1 :(得分:0)

如果您正在寻找更简单的解决方案,这将有所帮助。

您可以仅创建一个名为“ new_column”的新列,并将所有值初始化为1(因为第一个值应为1)。

df['new_column'] = 1

然后,您可以使用for循环遍历行并根据您的公式更新新的列值。

for i in range(1, len(df)):
    df.loc[i, 'new_column'] = df['new_column'][i-1] * (1 + df['Z'][i])