0

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

目前我正在为此使用一个 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

我想要的结果

4

4 回答 4

1

你可以试试这个:

df['trip_id'] = (df['interim_tour_chk'] == 0).cumsum()

解释:

(df['interim_tour_chk'] == 0)将返回一个 pandas 系列的布尔值,判断每个 'interim_tour_chk' 是否等于 0。这里是pandas 的文档 cumsum

于 2019-04-19T00:41:21.137 回答
0

您不需要使用索引:

a = 1
for idx, row in df.iterrows():
    row['trip_id'] = a
    if row['interim_tour_chk'] == 0:
        a += 1

还要注意您的比较运算符==不是分配运算符=

于 2019-04-19T00:31:01.177 回答
0

如果我的解释正确,您希望 df.trip_id 的值每次 df.interim_tourchk 为 0 时增加 1。

这将完成工作:

df['trip_id'] = (df.interim_tourchk == 0).cumsum()

(如果您希望它从 0 开始,则减去 1)。

于 2019-04-19T00:43:49.240 回答
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
于 2019-04-19T01:00:56.670 回答