这应该是一个非常简单的问题。我有两行代码。第一个作品。第二个错误如下:
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、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 new question包含我需要的答案。谢谢大家!
答案 0 :(得分:2)
在定义launchwin.*
语句(简写)时,您还需要定义if
。
else
编辑:
在您的第一个lambda中,它实际上是一个系列,因此您需要循环播放它(例如,带有地图)
lambda x: 1 if x == 0 else 0 # For example.
答案 1 :(得分:1)
您的代码:lambda x: 1 if x == 0
不是有效的表达式。尝试类似lambda x: 1 if x == 0 else 0
参见下文:
>>> example = lambda x: 1 if x == 0 else 0
>>> example(0)
1
>>> example(1)
0
答案 2 :(得分:0)
先前的答案通过在末尾添加“ else 0”,迅速解决了我的lambda函数错误。 here用下面的代码行回答了我的最终问题:
a1['off0'] = a1.groupby('del_month')['off0_on1'].transform(lambda x: sum(x==0))