Приращение счетчика панд после сравнения двух столбцов - PullRequest
0 голосов
/ 15 декабря 2018

Я бы хотел создать простой счетчик в пандах, который увеличивается на единицу каждый раз, когда цикл завершен.Это должно быть просто, но я не могу понять это ... Вот что я хотел бы сделать, с иллюстративным пандой DataFrame:

# Illustrative dataframe
df = pd.DataFrame({'a':[0,0,1,1,0,0,1,1], 'b':[0,1,1,0,0,1,1,0]})

# Initialize counter to zero
counter = 0

# Increment the counter by 1 every time 'a' == 1 and 'b' == 0
df['c'] = [counter += 1 if (df['a'] == 1) and (df['b'] == 0)]

Я был бы счастлив, если бы кто-то показал мне, каксделать это с помощью pandas.apply, используя пользовательскую функцию.По сути, я перебираю каждую запись / строку в DataFrame и сравниваю два столбца.

Я знаю, что, вероятно, мог бы сделать это с помощью numpy.where (), а затем сделать расширенную сумму, но я действительно пытаюсь узнать, как использовать применение с пользовательскими функциями.

Здесьэто другой метод, который я пробовал, с пользовательской функцией и pandas.apply:

counter_list = []
counter = 0
def count_cycles(df):
    if (df['a'] == 1) and (df['b'] == 0):
        counter += 1
    counter_list.append(counter)
    return pd.Series(counter_list)
df['c'] = df.apply(count_cycles)

1 Ответ

0 голосов
/ 15 декабря 2018

Вы можете достичь того, чего хотите,

df['c'] = ((df['a'] == 1) & (df['b'] == 0)).cumsum()
...