根据另一列的进度值创建数据框列?

时间:2019-06-02 20:44:17

标签: python-3.x pandas

我有以下数据框:

     car_id  time(seconds)   is_charging  
1      1         65              1
2      1         70              1
3      1         67              1
4      1         71              1
5      1         120             0
6      1         124             0 
7      1         117             0
8      1         80              1
9      1         74              1
10     1         62              1
11     1         130             0
12     1         124             0

我想创建一个新列来枚举'is_charging'列的充电和放电周期,以便稍后我可以对新列进行分组并计算每个周期的平均值,最大值,最小值等。

结果数据框应如下所示:

     car_id  time(seconds)   is_charging  periods_id
1      1         65              1            1
2      1         70              1            1
3      1         67              1            1
4      1         71              1            1
5      1         120             0            2
6      1         124             0            2
7      1         117             0            2
8      1         80              1            3
9      1         74              1            3
10     1         62              1            3
11     1         130             0            4
12     1         124             0            4

我已经这样做,例如:

df['periods_ids] = 0

period_id = 1
previous_charging_state = df.at[0,'is_charging']

def computePeriodIDs():
    for ind in df.index:
        if df.at[index, 'is_charging'] != previous_charging_state:
            previous_charging_state  = df.at[index, 'is_charging']
            period_id  = period_id + 1
            df.at[index, 'periods_id'] = period_id
        else:
            df.at[index, 'periods_id'] = period_id

这对于我拥有的行数来说太慢了。我正在尝试使用向量化函数,尤其是apply()函数,但是由于缺乏理解,我没有取得太大的成功,也无法在网上找到类似的问题。

有人可以帮助我优化这个问题吗?

1 个答案:

答案 0 :(得分:3)

尝试一下:

df.is_charging.diff().ne(0).cumsum()

Out[115]:
1     1
2     1
3     1
4     1
5     2
6     2
7     2
8     3
9     3
10    3
11    4
12    4
Name: is_charging, dtype: int32