在熊猫python中按组的第n个十分位数划分的虚拟对象

mxhet

我有一个这样的熊猫数据框:

import pandas as pd
df = {'Person' : ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C', 'C', 'D', 'D', 'D', 'E', 'E', 'E', 'E', 'F', 'F', 'F', 'F', 'G', 'G', 'G', 'G', 'G', 'H', 'H', 'H', 'H', 'I', 'I', 'I', 'I', 'I', 'J', 'J', 'J', 'J', 'J', 'J', 'K', 'K', 'K', 'K', 'K', 'L', 'L','L'],
      'Score' : [18, 17, 15, 10, 11, 12, 15, 15, 16, 16, 16, 15, 18, 10, 12, 12, 8, 7, 10, 9, 5, 4, 2, 4, 10, 12, 11, 12, 10, 3, 1, 5, 6, 18, 19, 20, 16, 19, 10, 12, 11, 13, 10, 12, 20, 20, 20, 19, 19, 7, 12, 15], 
      'Group' : [1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1]}
df = pd.DataFrame(df, columns = ['Person', 'Group', 'Score', 'Dummy'])
df

因此,我想创建一个虚拟对象,当单个分数高于或等于该组的八分位数时,其值为1,否则为零。例如,我可以使用以下方法计算每组的十分位数:

df.groupby("Group")["Score"].quantile(0.8)

Group
1    15.0
2    19.2
3    12.0
Name: Score, dtype: float64

我想创建一个新的虚拟变量,当组1的得分高于或等于15.0,组2的得分高于或等于19.2,组3的得分高于时,取值为1。或等于12.0,否则为零。

结果变量因此如下所示:

df = {'Person' : ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C', 'C', 'D', 'D', 'D', 'E', 'E', 'E', 'E', 'F', 'F', 'F', 'F', 'G', 'G', 'G', 'G', 'G', 'H', 'H', 'H', 'H', 'I', 'I', 'I', 'I', 'I', 'J', 'J', 'J', 'J', 'J', 'J', 'K', 'K', 'K', 'K', 'K', 'L', 'L','L'],
      'Score' : [18, 17, 15, 10, 11, 12, 15, 15, 16, 16, 16, 15, 18, 10, 12, 12, 8, 7, 10, 9, 5, 4, 2, 4, 10, 12, 11, 12, 10, 3, 1, 5, 6, 18, 19, 20, 16, 19, 10, 12, 11, 13, 10, 12, 20, 20, 20, 19, 19, 7, 12, 15], 
      'Group' : [1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1], 
      'Dummy' : [1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1]}
df = pd.DataFrame(df, columns = ['Person', 'Group', 'Score', 'Dummy'])
df

最直接的方法是什么?

广晃

这只是一张地图:

quantiles = df.groupby("Group")["Score"].quantile(0.8)

df['Dummy'] = (df['Score'] >= df['Group'].map(quantiles)).astype(int)

输出(头):

   Person  Group  Score  Dummy
0       A      1     18      1
1       A      1     17      1
2       A      1     15      1
3       B      2     10      0
4       B      2     11      0
5       B      2     12      0
6       B      2     15      0
7       C      2     15      0
8       C      2     16      0
9       C      2     16      0
10      C      2     16      0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何基于均值,中位数,第1位和第9位十分位数生成数据集?

如何基于均值,中位数,第1位和第9位十分位数生成数据集?

如何基于均值,中位数,第1位和第9位十分位数生成数据集?

使用Python解决四分位数和十分位数

为向量中的每个值计算相应的十分位数

在qcut十分位数之后选择/过滤垃圾箱

data.table中按组划分的分位数

将数据帧列切成十分位数并追加到矩阵

Pyspark列的十分位数或其他分位数等级

熊猫:按两列分组,然后以长格式查找第25,中位数,第75个百分位数和3列的平均值

根据组在熊猫数据框中查找百分位数

熊猫:按年度百分位数划分时间序列

R:按组计算十分位数

从数据帧计算相应的第n个百分位数

如何将pandas列中的数字分成十分位数?

将数据分为十分位数并计算每个十分位数的平均值

如何计算十分位数的赔率和95%置信区间

在熊猫数据框中,如何计算每月内每个十分位数的中位数

按组在Spark-Scala中查找百分位数

计算Stata中的十分位数限制

使用Python熊猫将客户分类为十分位数?

R中分组变量的十分位数

如何使用 pandas.qcut 从列中的值中提取十分位数

ggplot (geom_bar) 中的十分位数填充

在python中查找另一个变量的每个十分位数内变量的比例

根据另一列的总和将数据帧划分为十分位数的方法

如何创建十分位数?

如何在 mysql 中创建分成十分位数的百分比交叉表

如何获得R中分布的第n个百分位数?