Python groupby 多列并转换 pandas 键错误
Python groupby multiple columns and transform pandas key error
我在将转换应用到 Pandas 中的 2 列 groupby 时遇到了一些问题。我已经尝试了很多引用类似用例的事情。
我希望按日期和用户分组,并通过说 if 'nan' 然后 0 else 1 对标志列进行转换。我的数据如下所示:
user date Flag
0 ron 12/21/2019 1
1 ron 12/22/2019 2
2 april 12/21/2016 nan
3 april 12/23/2016 1
4 andy 12/21/2016 nan
这是我设置的,这在逻辑上对我来说是有意义的,但我遇到了键盘错误。
s = master['Flag'].eq('nan').groupby(master['date','user']).transform('any')
master.loc[:,'attendance'] = s.map({True:0,False: 1})
KeyError: ('date', 'user')
在 master['Flag'].eq('nan')
之后,您只有系列类型。然后你调用 .groupby
并且应该传递用于分组的列(但那里没有这样的列)。
如果我正确理解了整个任务,这里是代码:
# step 1
master['Flag'] = master['Flag'] == 'nan'
master
Out[1]:
user date Flag
0 ron 12/21/2019 False
1 ron 12/22/2019 False
2 april 12/21/2016 True
3 april 12/23/2016 False
4 andy 12/21/2016 True
# step 2
s = master.groupby(['date','user']).agg('any')
s
Out[2]:
Flag
date user
12/21/2016 andy True
april True
12/21/2019 ron False
12/22/2019 ron False
12/23/2016 april False
# step 3
s['attendance'] = s['Flag'].map({True:0,False: 1})
s
Out[3]:
Flag attendance
date user
12/21/2016 andy True 0
april True 0
12/21/2019 ron False 1
12/22/2019 ron False 1
12/23/2016 april False 1
..或短版
master.assign(flg = master['Flag'] == 'nan').groupby(['date','user'])[['flg']].agg('any')['flg'].map({True:0,False: 1}).to_frame()
我在将转换应用到 Pandas 中的 2 列 groupby 时遇到了一些问题。我已经尝试了很多引用类似用例的事情。
我希望按日期和用户分组,并通过说 if 'nan' 然后 0 else 1 对标志列进行转换。我的数据如下所示:
user date Flag
0 ron 12/21/2019 1
1 ron 12/22/2019 2
2 april 12/21/2016 nan
3 april 12/23/2016 1
4 andy 12/21/2016 nan
这是我设置的,这在逻辑上对我来说是有意义的,但我遇到了键盘错误。
s = master['Flag'].eq('nan').groupby(master['date','user']).transform('any')
master.loc[:,'attendance'] = s.map({True:0,False: 1})
KeyError: ('date', 'user')
在 master['Flag'].eq('nan')
之后,您只有系列类型。然后你调用 .groupby
并且应该传递用于分组的列(但那里没有这样的列)。
如果我正确理解了整个任务,这里是代码:
# step 1
master['Flag'] = master['Flag'] == 'nan'
master
Out[1]:
user date Flag
0 ron 12/21/2019 False
1 ron 12/22/2019 False
2 april 12/21/2016 True
3 april 12/23/2016 False
4 andy 12/21/2016 True
# step 2
s = master.groupby(['date','user']).agg('any')
s
Out[2]:
Flag
date user
12/21/2016 andy True
april True
12/21/2019 ron False
12/22/2019 ron False
12/23/2016 april False
# step 3
s['attendance'] = s['Flag'].map({True:0,False: 1})
s
Out[3]:
Flag attendance
date user
12/21/2016 andy True 0
april True 0
12/21/2019 ron False 1
12/22/2019 ron False 1
12/23/2016 april False 1
..或短版
master.assign(flg = master['Flag'] == 'nan').groupby(['date','user'])[['flg']].agg('any')['flg'].map({True:0,False: 1}).to_frame()