gpt4 book ai didi

python - 基于pandas python中分组的第n个十分位数的虚拟

转载 作者:行者123 更新时间:2023-12-03 23:26:32 25 4
gpt4 key购买 nike

我有一个像这样的 Pandas 数据框:

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
因此,我想创建一个虚拟对象,当单个分数高于或等于该组的第 8 个十分位数时取值为 1,否则取值为 0。例如,我可以使用以下方法计算每组的十分位数:
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 组的得分高于或等于 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
什么是最直接的方法来做到这一点?

最佳答案

这只是一张 map :

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

关于python - 基于pandas python中分组的第n个十分位数的虚拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64229381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com