这应该是一个非常简单的问题。我有两行代码。第一个有效。第二个给出以下错误:
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]})
有什么建议可以修改上面的第二行代码吗?
Edit:其中两个答案建议使用映射函数,它会产生以下输出。 “on1”列对于我的目的来说是正确的; “off0”列不正确。对于第一个“del_month”,“off0”列应与“on1”列具有相同的结果。对于第二个“del_month”,“off0”列应为全 1(即 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))
Edit 2不确定这是否能澄清问题,但最终我希望 pandas 能够轻松完成以下 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
Edit 3
This 新问题 https://stackoverflow.com/questions/53107112/use-pandas-to-group-by-column-and-then-create-a-new-column-based-on-a-condition包含我需要的答案。感谢大家!