Это должен быть очень простой вопрос. У меня есть две строки кода. Первый работает. Второе дает следующую ошибку:
SyntaxError: invalid syntax
Вот две строки кода. Первая строка (которая работает нормально) подсчитывает строки, где off0_on1 == 1. Вторая строка пытается подсчитать строки, где off0_on1 == 0.
a1['on1'] = a1.groupby('del_month')['off0_on1'].transform(sum)
a1['off0'] = a1.groupby('del_month')['off0_on1'].transform(lambda x: 1 if x == 0)
Вот кадр данных панд:
a1 = pd.DataFrame({'del_month':[1,1,1,1,2,2,2,2], 'off0_on1':[0,0,1,1,0,1,1,1]})
Есть предложения пересмотреть вторую строку кода выше?
Изменить:
В двух ответах предложено использовать функцию карты, которая выдает следующий результат. Столбец «on1» подходит для моих целей; столбец "off0" неверен. Для первого «del_month» столбец «off0» должен иметь те же результаты, что и столбец «on1». Для второго «del_month» в столбце «off0» должны быть все единицы (т. Е. 1, 1, 1, 1).
Вот что происходит, когда я использую следующую функцию карты (см. Изображение ниже):
a1['off0'] = a1.groupby('del_month')['off0_on1'].transform(lambda series: map(lambda x: 1 if x == 0 else 0, series))
Редактировать 2
Не уверен, что это прояснит ситуацию, но в конечном итоге я хочу, чтобы панды сделали то, что следующий код SQL делает так легко:
select
del_month
, sum(case when off0_on1 = 1 then 1 else 0 end) as on1
, sum(case when off0_on1 = 0 then 1 else 0 end) as off0
from a1
group by del_month
order by del_month
Редактировать 3
Этот новый вопрос содержит ответ, который мне нужен. Спасибо всем!