是否存在一种基于另一列的值来递增一列的值的pythonic方法?

时间:2019-04-19 00:26:50

标签: python pandas

我想为列分配增量值。但是,增量不是连续的,发生增量的行取决于另一列的值。

当前,我为此使用了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

my desired results

4 个答案:

答案 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