Python 多组应用()更改视图值
出于某种原因,这不起作用: 样本数据:Python 多组应用()更改视图值,python,pandas,Python,Pandas,出于某种原因,这不起作用: 样本数据: dt = pd.DataFrame({'sid':['a']*9 + ['b']*9 + ['c']*9, 'src': [1] *18 + [2] * 9, 'val':np.random.randn(27), 'dval': [0]*18 + np.random.rand(9)}) 我想根据一些val标准,按src、sid对这些行进行多
dt = pd.DataFrame({'sid':['a']*9 + ['b']*9 + ['c']*9,
'src': [1] *18 + [2] * 9,
'val':np.random.randn(27),
'dval': [0]*18 + np.random.rand(9)})
我想根据一些val
标准,按src、sid对这些行进行多分组,并为那些为c的行更改adval
行值
我一直收到一个StopIteration
错误
# -- set bycp threshold for probability val to alert
def quantg(g):
try:
g['dval'] = g['dval'].apply(lambda x: x > x['val'].quantile(.90) and 1 or 0 )
print '***** bycp ', g.head(2)
#print 'discretize bycp ', g.head()
return g
except (Exception,StopIteration) as e:
print '**bycp error\n', e
print g.info()
pass
然后我尝试在groupby之前按行筛选:
d = d[d['alert_t']=='bycp'].groupby(['source','subject_id','alert_t','variable']).apply(quantg )
我还尝试了多级选择:
# -- xs for multilevel select
g['dval'] = g.xs(('c','sid')).map(lambda x: len(g['value']) and\
#(x>g['value'].quantile(.90) and 1 or 0 ))
但是没有运气
获取frameindex
或stopiteration
类型错误
给了我什么,我如何才能做到这一点?以下内容并没有达到您认为的效果:
x > x['val'].quantile(.90) and 1 or 0
事实上,如果你用一个系列来尝试它,它应该会产生一个ValueError
在编写类似的内容时,您希望使用np。其中
:
np.where(x > x['val'].quantile(.90), 1, 0)
注意:astype('int64')
也可以工作,或者只是将其作为bool
然而,我想我可能会在这里使用一个变换(提取每个组的分位数,然后掩盖它),比如:
q90 = g.transform(lambda x: x.quantile(.90))
df[df.val > q90]
如何更新multindex数据帧。d、 更新(dnew)给出了一个valueerror,无法从复制轴重新编制索引?@syntax不确定问题是什么,你能作为一个单独的问题发布吗?嗨,谢谢你帮助我了解np.where;请参阅我的关于更新的编辑。再次感谢@语法请你把它作为一个新的/单独的问题发布!这样做也可以让其他人回答,也意味着其他人将来在谷歌上搜索同一个问题将能够更容易地找到它。。。但是编辑在哪里呢?
q90 = g.transform(lambda x: x.quantile(.90))
df[df.val > q90]