gpt4 book ai didi

python - pandas:ValueError:只能比较相同标签的系列对象

转载 作者:行者123 更新时间:2023-12-01 09:33:48 24 4
gpt4 key购买 nike

我有如下 2 个 csv 文件,我想在找到其值后使用比较函数来查找个人表现(在 df1 中)是否高于/低于类(class)平均水平(在 df2 中)。

df1:
Name Class Test1 Test2 Test3
John 9A 75 83 77
David 9B 65 67 55
Peter 9A 85 90 88
Tom 9C 74 92 78

df2:
Class Test1 Test2 Test3
9A 80 82 84
9B 84 75 77
9C 75 78 80

这是我的方法,如果我错了,请随时纠正/指导我。我首先在df1中找到一个人的Class,例如John9A,然后返回其他列例如基于 9A

df2 中的 Test1Test2
target_class = df1.loc[df1['Name'] == 'John', 'Class']
print(target_class)
>>>>9A
Test1_avg = df2.loc[df2['Class'] == target_class, 'Test1']
# ideally it should return 80

我得到了这个ValueError:只能比较相同标签的Series对象

或者简单地说,您如何比较 df1 中 John 的 Test1 与 df2 中 9A 类的 Test1?有比我更简单的方法吗?感谢您的帮助!

更新:如果满足条件,我将使用这样的比较函数来返回分数

def comparison(a, b):
return 2 if a > b else 1 if a == b else -1

最佳答案

这是通过 pandas.merge 的一种方式。

# rename df2 columns
df2 = df2.rename(columns={'Test'+str(x): 'AvgTest'+str(x) for x in range(1, 4)})

# left merge df1 on df2
res = pd.merge(df1, df2, how='left', on=['Class'])

# calculate comparison results
comparison = pd.DataFrame(res.loc[:, res.columns.str.startswith('Test')].values >= \
res.loc[:, res.columns.str.startswith('AvgTest')].values,
columns=['Comp'+str(x) for x in range(1, 4)])

# join results to dataframe
res = res.join(comparison)

print(res)

# Name Class Test1 Test2 Test3 AvgTest1 AvgTest2 AvgTest3 Comp1 \
# 0 John 9A 75 83 77 80 82 84 False
# 1 David 9B 65 67 55 84 75 77 False
# 2 Peter 9A 85 90 88 80 82 84 True
# 3 Tom 9C 74 92 78 75 78 80 False

# Comp2 Comp3
# 0 True False
# 1 False False
# 2 True True
# 3 True False

关于python - pandas:ValueError:只能比较相同标签的系列对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49713860/

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