从具有条件的数据框中选择列

我今天在学习使用pandas library,遇到了这个我无法完全理解的错误。这是我使用的数据框。


      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 的 name 和 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

先感谢您


明月笑刀无情
浏览 117回答 2
2回答

当年话下

当您执行 a 时groupby("col_name"),默认行为是 pandas 将 the 设置col_name为索引在您的情况下,您可以将名称设置为数据帧索引您可以使用temp = df.groupby('name').mean()temp = temp[temp['combat'] > 250]print(temp['kda'])得到你想要的结果(它会返回一个系列)另一种选择是as_index=False与 groupby 一起使用groupby('col_name', as_index=False)这将返回一个以“名称”作为列的数据框,您的第一个解决方案将起作用看看中间步骤,你就会明白发生了什么

皈依舞

替代答案。.reset_index().groupby()可以在下面的代码中使用。此外,在打印时,如果需要打印两列以上,您可能需要添加[[]]而不是。[]# Import librariesimport pandas as pd# Create DataFramedf = 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    kda0  Austin  1.5754    Nick  2.300
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python