Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多组应用()更改视图值_Python_Pandas - Fatal编程技术网

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的行更改a
dval
行值

我一直收到一个
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]