2024-04-26 09:31:28 发布
网友
我有一个数据帧
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,依此类推。你知道吗
您可以使用函数: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())
您可以使用函数:pd.cumsum
如果您的数据帧称为df:
这里有-2,所以你的总数从1开始
您可以执行移位累积和:
你可以这样做:
如果您想对类型转换和na填充进行更具体的控制,还可以使用更详细的:
实际上,您可以使用与jpp答案相同的逻辑,但将其包装在assign调用中:
相关问题 更多 >
编程相关推荐