Python创建新列,并用它和其他列一起执行操作

2024-04-26 09:31:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧

x   y   z   new_col
1   2   3    1
1   2   3    4
1   2   3    7
1   2   3    10
1   2   3    13

要创建新列并将值1设置为第一行。 新列的所有其他值将是1+3(从z开始为3),然后是4+3,依此类推。你知道吗


Tags: 数据newcol
3条回答

您可以使用函数:pd.cumsum

如果您的数据帧称为df:

df['new_column'] =  df.cumsum() - df.z[0] + 1   

这里有-2,所以你的总数从1开始

您可以执行移位累积和:

df['new'] = 1 + df['z'].shift().fillna(0).astype(int).cumsum()

print(df)

   x  y  z  new
0  1  2  3    1
1  1  2  3    4
2  1  2  3    7
3  1  2  3   10
4  1  2  3   13

你可以这样做:

df.assign(new_col = lambda x: 1 + x['z'].shift().cumsum()).fillna(1).astype(int)
    x   y   z   new_col
0   1   2   3   1
1   1   2   3   4
2   1   2   3   7
3   1   2   3   10
4   1   2   3   13

如果您想对类型转换和na填充进行更具体的控制,还可以使用更详细的:

df.assign(new_col = lambda x: 1 + x['z'].shift().cumsum()
          ).fillna({'new_col':1}).astype({'new_col': int})

实际上,您可以使用与jpp答案相同的逻辑,但将其包装在assign调用中:

df.assign(new_col = lambda x: 1+ x['z'].shift().fillna(0).astype(int).cumsum())

相关问题 更多 >