从条件中选择数据框的列

时间:2020-07-08 04:24:46

标签: python pandas

我今天正在学习使用熊猫库,但是遇到了我无法完全理解的错误。 这是我正在使用的数据框。

      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

提前谢谢

2 个答案:

答案 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