在python中,如何创建两个相互迭代的列?

在python中,如何创建两个相互迭代的列?,python,pandas,dataframe,Python,Pandas,Dataframe,问题转化为这个,我有一个简单的数据框架,我们称之为df id k t 2A 1 100 2A 2 100 2A NaN 100 4C 3 80 4C 4 80 4C 1 80 3B NaN 120 3B 7 120 3B 4 120 我想创建一个新的列,叫做t和t1。t1基于t、k和id。在这个场景中,我只有3个id的2A、4C和3B。最终输出将为 id k t t1 2A 1 100 99 2A 2 99 97 2A

问题转化为这个,我有一个简单的数据框架,我们称之为df

id  k   t
2A  1   100
2A  2   100
2A  NaN 100
4C  3   80
4C  4   80
4C  1   80
3B  NaN 120
3B  7   120
3B  4   120
我想创建一个新的列,叫做t和t1。t1基于t、k和id。在这个场景中,我只有3个id的2A、4C和3B。最终输出将为

id  k   t   t1
2A  1   100 99
2A  2   99  97
2A  NaN 97  97
4C  3   80  77
4C  4   77  73
4C  1   73  72
3B  NaN 120 120
3B  7   120 113
3B  4   113 109
因此,想法如下

其中t1是

df['t1']=df['t']-df['k']

我不知道如何转换最终df中t上的值,因为每个id的第一个值都必须基于原始值
df[“t”]
,但之后是df[t1],如图所示。

让我们试试
cumsum
groupby

df['t1'] = df.t-df.fillna(0).groupby('id').k.cumsum()
df['t'] = df['t1'] + df['k'].fillna(0)
df
Out[85]: 
   id    k      t     t1
0  2A  1.0  100.0   99.0
1  2A  2.0   99.0   97.0
2  2A  NaN   97.0   97.0
3  4C  3.0   80.0   77.0
4  4C  4.0   77.0   73.0
5  4C  1.0   73.0   72.0
6  3B  NaN  120.0  120.0
7  3B  7.0  120.0  113.0
8  3B  4.0  113.0  109.0

非常好,谢谢