Python 熊猫:使用groupby计算添加标志
我想首先获得第三个量化的分组依据(本例中为group and level) 现在我有了每组的分位数。我想根据groupby值在原始df上添加一列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
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