Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.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 熊猫:使用groupby计算添加标志_Python_Pandas_Filter - Fatal编程技术网

Python 熊猫:使用groupby计算添加标志

Python 熊猫:使用groupby计算添加标志,python,pandas,filter,Python,Pandas,Filter,我想首先获得第三个量化的分组依据(本例中为group and level) 现在我有了每组的分位数。我想根据groupby值在原始df上添加一列 0.75 value group level A X 0.67 Z 0.45 B X 0.65 Z 0.27 结果是这样的,我会添加一个新的列,如果值高于量化值,那么我会添加1,如果值低于量化值,那么添加0 customer group level value ne

我想首先获得第三个量化的分组依据(本例中为group and level)

现在我有了每组的分位数。我想根据groupby值在原始df上添加一列

   0.75 value
group   level   
A   X   0.67
    Z   0.45
B   X   0.65
    Z   0.27
结果是这样的,我会添加一个新的列,如果值高于量化值,那么我会添加1,如果值低于量化值,那么添加0

    customer    group   level   value     new
       1          A       Z       0.40     1
       2          B       X       0.60     0
谢谢

IIUC:

d['new'] = (d.value > d.groupby(['group', 'level'])['value']
                       .transform('quantile', 0.75)).astype(int)

>>> d
  customer group level  value  new
0        1     A     Z    0.4    0
1        2     B     X    0.6    0
2        3     B     X    0.7    1
3        4     A     X    0.6    0
4        5     B     Z    0.3    1
5        6     A     Z    0.5    1
6        7     B     Z    0.2    0
7        8     A     X    0.7    1
8        9     B     X    0.5    0
9       10     A     Z    0.2    0

仅使用
lt
和索引匹配

q = d.groupby(['group', 'level']).quantile(0.75)
d.set_index(['group', 'level']).value.lt(q.value).astype(int)

group  level
A      X        1
       X        0
       Z        1
       Z        0
       Z        1
B      X        1
       X        0
       X        1
       Z        0
       Z        1
Name: value, dtype: int64

new
中的第一行不应该是
0
,因为
0.4
低于
0.45
q = d.groupby(['group', 'level']).quantile(0.75)
d.set_index(['group', 'level']).value.lt(q.value).astype(int)

group  level
A      X        1
       X        0
       Z        1
       Z        0
       Z        1
B      X        1
       X        0
       X        1
       Z        0
       Z        1
Name: value, dtype: int64