gpt4 book ai didi

python - Pandas 将数据框与学生成绩与历史分位数进行比较

转载 作者:行者123 更新时间:2023-11-28 16:56:55 32 4
gpt4 key购买 nike

我有两个数据框。一个按类(class)显示学生在两次测试中的测试结果

import pandas as pd   
results = pd.DataFrame({
'id':[1,2,3],
'class':[1,1,2],
'test_1':[0.67,0.88,0.33],
'test_2':[0.76,0.63,0.78]})
results
   id  class  test_1  test_2
0 1 1 0.67 0.76
1 2 1 0.88 0.63
2 3 2 0.33 0.78

另一个显示基于以前学期的类(class)和测试的分位数

quantiles = pd.DataFrame({'class':[1,2],
'test_1_0.25':[0.23,0.31],
'test_1_0.5':[0.54,0.67],
'test_1_0.75':[0.8,0.9],
'test_2_0.25':[0.23,0.31],
'test_2_0.5':[0.54,0.67],
'test_2_0.75':[0.8,0.9]})
  class  test_1_0.25  test_1_0.5  test_1_0.75  test_2_0.25  test_2_0.5  \
0 1 0.23 0.54 0.8 0.23 0.54
1 2 0.31 0.67 0.9 0.31 0.67

test_2_0.75
0 0.8
1 0.9

我想返回一个数据名,告诉我他们放置的分位数。如果低于 25,则为 0;如果低于 50,则为 1;如果低于 75,则为 2;如果高于 75,则为 3。所以输出将如下所示

   id  test_1_quantile  test_2_quantile  
0 1 2 2
1 2 3 1
2 3 1 2

非常感谢任何帮助。谢谢

最佳答案

第一个DataFrame.merge两个 DataFrame,然后循环是所有测试值和处理 - 首先 DataFrame.filter通过相同的 test,为低于 .25 分位数的测试值添加列,为输出范围设置新的列名称并通过 DataFrame.lt 进行比较.通过 iloc 最后更改列的顺序并获取第一个 True 值的列名称以替换 test 列:

df = pd.merge(results, quantiles, on='class')

for t in results.columns.difference(['id','class']):
#print (t)
df1 = df.filter(like=t)
df1.insert(1, t + '_0', 0)
df1.columns = [t] + list(range(4))
#print (df1)
a = df1.iloc[:, 1:].lt(df1[t], axis=0).iloc[:, ::-1].idxmax(axis=1)
df[t] = a

print (df[results.columns])
id class test_1 test_2
0 1 1 2 2
1 2 1 3 2
2 3 2 1 2

关于python - Pandas 将数据框与学生成绩与历史分位数进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57505552/

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