python - زيادة إضافة تحت شرط في الباندا




pandas (4)

سريع مع نومبا

from numba import njit

@njit
def f(u):
    out = np.zeros(len(u), np.int64)
    a = out[0] = u[0]
    for i in range(1, len(u)):
        if u[i] == 1:
            if u[i - 1] == 0:
                a += 1
            out[i] = a
    return out

f(df.servo_in_position.to_numpy())

array([0, 0, 1, 0, 2, 2, 0, 0, 3, 0, 4, 0, 5, 5, 5, 0, 0, 0, 6, 6, 0, 0, 0])

لالباندا dataframe التالية

    servo_in_position   second_servo_in_position    Expected output
0   0   1   0
1   0   1   0
2   1   2   1
3   0   3   0
4   1   4   2
5   1   4   2
6   0   5   0
7   0   5   0
8   1   6   3
9   0   7   0
10  1   8   4
11  0   9   0
12  1   10  5
13  1   10  5
14  1   10  5
15  0   11  0
16  0   11  0
17  0   11  0
18  1   12  6
19  1   12  6
20  0   13  0
21  0   13  0
22  0   13  0

أريد زيادة العمود "الإخراج المتوقع" فقط إذا تغير "servo_in_position" من 0 إلى 1. أريد أيضًا افتراض "الإخراج المتوقع" هو 0 (لاغٍ) إذا كان "servo_in_position" يساوي 0.

حاولت

input_data['second_servo_in_position']=(input_data.servo_in_position.diff()!=0).cumsum()

ولكنه يعطي الإخراج كما هو الحال في العمود "second_servo_in_position" ، وهذا ليس ما أردت.

بعد ذلك أرغب في تجميع وحساب المتوسط ​​باستخدام:

print("Mean=\n\n",input_data.groupby('second_servo_in_position').mean())

استخدام cumsum mask :

df['E_output'] = df['servo_in_position'].diff().eq(1).cumsum()\
                                        .mask(df['servo_in_position'] == 0, 0)

انتاج:

    servo_in_position  second_servo_in_position  Expected output  E_output
0                   0                         1                0         0
1                   0                         1                0         0
2                   1                         2                1         1
3                   0                         3                0         0
4                   1                         4                2         2
5                   1                         4                2         2
6                   0                         5                0         0
7                   0                         5                0         0
8                   1                         6                3         3
9                   0                         7                0         0
10                  1                         8                4         4
11                  0                         9                0         0
12                  1                        10                5         5
13                  1                        10                5         5
14                  1                        10                5         5
15                  0                        11                0         0
16                  0                        11                0         0
17                  0                        11                0         0
18                  1                        12                6         6
19                  1                        12                6         6
20                  0                        13                0         0
21                  0                        13                0         0
22                  0                        13                0         0

جرب np.where :

df['Expected_output'] = np.where(df.servo_in_position.eq(1),
                                 df.servo_in_position.diff().eq(1).cumsum(),
                                 0)

هذا هو cumsum و mul

df.servo_in_position.diff().eq(1).cumsum().mul(df.servo_in_position.eq(1),axis=0)






pandas