我今天正在学习使用熊猫库,但是遇到了我无法完全理解的错误。 这是我正在使用的数据框。
name kda combat econ
0 Austin 1.45 270.0 67
8 Austin 1.70 300.0 90
4 Justin 1.36 230.0 50
11 Justin 1.50 270.0 60
1 Kevin 1.40 230.0 55
6 Kevin 1.00 100.0 120
3 Matt 1.00 180.0 65
9 Matt 1.40 280.0 70
2 Nick 2.10 360.0 87
7 Nick 2.50 340.0 88
5 Will 1.20 185.0 45
10 Will 1.60 260.0 75
我试图获取平均战斗成绩大于250的姓名和kda列 我试图做到的
temp = df.groupby('name').mean()
temp = temp[temp['combat'] > 250]
print(temp['name', 'kda'])
但是它返回了此关键错误
KeyError: "['name'] not in index"
有人可以解释为什么我不能从这些临时数据框中获取列吗?还是我的代码做错了什么? 幸运的是,我的朋友帮助了我,我可以做到
temp = df.loc[df['combat'] > 250, ['name','kda']]
print(temp.groupby('name').mean())
这确实给了窍门
kda
name
Austin 1.575
Justin 1.500
Matt 1.400
Nick 2.300
Will 1.600
提前谢谢
答案 0 :(得分:0)
当您执行def getHighestOcurrence(listAnyKind):
counter = 0
num = listAnyKind[0]
for i in listAnyKind:
frequency = listAnyKind.count(i)
if (frequency > counter):
counter = frequency
num = i
return num
listAnyKind = ['diamonds', 'spades', 'spades', 'clubs','hearts', 'diamonds']
print(getHighestOcurrence(listAnyKind))
时,默认行为是熊猫将groupby("col_name")
设置为索引
根据您的情况,您可以将名称设置为数据框索引
您可以使用
col_name
获得所需的结果(它将返回系列)
另一种选择是将temp = df.groupby('name').mean()
temp = temp[temp['combat'] > 250]
print(temp['kda'])
与groupby一起使用
as_index=False
这将返回一个以'name'作为列的数据框,您的第一个解决方案将起作用
看看中间步骤,您会发现发生了什么
答案 1 :(得分:0)
替代答案。
可以在.reset_index()
之后使用 .groupby()
,如以下代码所示。同样,在打印时,如果需要打印多于两列,则可能需要添加[[]]
而不是[]
。
# Import libraries
import pandas as pd
# Create DataFrame
df = pd.DataFrame({
'name': ['Austin','Austin','Justin','Justin','Kevin','Kevin',
'Matt','Matt','Nick','Nick','Will','Will'],
'kda': [1.45,1.70,1.36,1.50,1.40,1.40,1.0,1.30,2.10,2.50,1.20,1.60],
'combat':[270.0,300.0,230.0,270.0,230.0,100.0,180,280,360,340,185,260],
'econ':[67,90,50,60,55,120,65,70,87,88,45,75]
})
# Groupby (copy pasted code from question and modified)
temp = df.groupby('name').mean().reset_index()
temp = temp[temp['combat'] > 250]
print(temp[['name', 'kda']])
输出
name kda
0 Austin 1.575
4 Nick 2.300