在python中,如何创建两个相互迭代的列?
问题转化为这个,我有一个简单的数据框架,我们称之为df在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
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
非常好,谢谢