我有一个这样的熊猫数据框:
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] 删除。
我来说两句