我想为一列分配增量值。但是,增量不是连续的,发生增量的行取决于另一列的值。
目前我正在为此使用一个 for 循环,这非常慢。我得到了我想要的结果,如下所示。你能建议一种更pythonic的方式来做到这一点吗?
a=1
for index, row in df.iterrows():
df.loc[index,'trip_id'] = a
if df.loc[index,'interim_tour_chk'] >= 0:
a = a+1
你可以试试这个:
df['trip_id'] = (df['interim_tour_chk'] == 0).cumsum()
解释:
(df['interim_tour_chk'] == 0)将返回一个 pandas 系列的布尔值,判断每个 'interim_tour_chk' 是否等于 0。这里是pandas 的文档 cumsum。
您不需要使用索引:
a = 1
for idx, row in df.iterrows():
row['trip_id'] = a
if row['interim_tour_chk'] == 0:
a += 1
还要注意您的比较运算符==不是分配运算符=。
如果我的解释正确,您希望 df.trip_id 的值每次 df.interim_tourchk 为 0 时增加 1。
这将完成工作:
df['trip_id'] = (df.interim_tourchk == 0).cumsum()
(如果您希望它从 0 开始,则减去 1)。
我觉得只是cumsum不能解决你的问题,在做之前我们需要做diff
df['trip_id']=(df.interim_tourchk.diff()<0).cumsum()
df
interim_tourchk trip_id
0 0 0
1 1 0
2 0 1
3 1 1
4 0 2
5 1 2
6 0 3
7 0 3
8 0 3
9 1 3
10 0 4
11 0 4
12 0 4
13 1 4