我想为列分配增量值。但是,增量不是连续的,发生增量的行取决于另一列的值。
当前,我为此使用了for循环,这非常缓慢。我得到了想要的结果,如下所示。您能建议一种更Python化的方法吗?
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
答案 0 :(得分:1)
您可以尝试以下方法:
df['trip_id'] = (df['interim_tour_chk'] == 0).cumsum()
说明:
(df['interim_tour_chk'] == 0)
将返回一个熊猫序列的布尔值,表明每个'interim_tour_chk'是否等于0。这是pandas's cumsum的文档。
答案 1 :(得分:0)
虽然您不需要使用索引
a = 1
for idx, row in df.iterrows():
row['trip_id'] = a
if row['interim_tour_chk'] == 0:
a += 1
还请注意,您的比较运算符是==
,而不是赋值运算符=
。
答案 2 :(得分:0)
如果我的解释正确,您希望每次df.interim_tourchk为0时df.trip_id的值增加1。
这将完成工作:
df['trip_id'] = (df.interim_tourchk == 0).cumsum()
(如果要从0开始,则减去1)。
答案 3 :(得分:0)
我觉得只有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