python - 访问 groupby 的列
问题描述
我有一个看起来像这样的表:
Bank Our Credit Rating External Credit Rating Deviation
A 11 12 1
D 10 8 2
A 4 4 0
B 6 7 1
C 12 11 1
A 9 10 1
将提取所有偏差总和 >=50 的银行。我通过上面给出的代码做了同样的事情。
输出:
[IN]
workbbok = pd.read_csv("Credit_Rating_comparison.csv")
df33= workbook.groupby('Bank').aggregate({"Deviation":np.sum})
df44=df33[df33['Deviation']>=50]
[OUT]
Bank Deviation
B 68.0
A 72.0
and so on for the relevant banks. (Basically sum of all deviations for
one bank where sum of all deviations is at least 50)
我无法访问第 1 列,即df44 中所有银行的名称。
[IN]: df44.columns
[OUT]: Index(['Deviation'], dtype='object')
[IN]: df44.iloc[:,0]
[OUT]
Bank
B 68.0
A 72.0
#Using df44.iloc[:,0] doesnt give column name deviation also and
returns deviation results along with Bank name. I want only bank names list.
基本上我需要一个仅包含银行名称的列表(没有偏差总和),以便我可以进一步使用该列表进行以下操作。
在获得所有银行的名称后,我需要找到 Deviation 列的频率分布。
下面的代码给出了对应于所有行的频率箱。我只想提取银行名称在 df44['Bank'] 中的行。任何帮助将不胜感激。
[IN]:
bins = [0, 1,2,3,4,5]
workbook['Deviation Bins'] = pd.cut(workbook['Deviation'], bins,
include_lowest =True)
workbook
[OUT]:
Bank Our Credit Rating External Credit Rating Deviation Deviation Bins
A 11 12 1 (-inf.,1]
D 10 8 2 (1,2]
A 4 4 0 (-inf.,1]
B 6 7 1 (-inf.,1]
C 12 11 1 (-inf.,1]
A 9 10 1 (-inf.,1]
解决方案
当您应用.aggregate()
时,这些组将进入返回数据框的索引而不是列。您可以做的是将索引变成一个新列,例如:
df33['Bank'] = df33.index
然后您可以过滤掉感兴趣的组:
df44=df33[df33['Deviation']>=50]
对于第二部分,您需要使用.isin()
:
workbook[workbook['Bank'].isin(df44['Bank'])]
推荐阅读
- javascript - Rails - 从 app/views 中的 js.erb 调用 app/javascript 中的 JS 函数
- typescript - 在接口中定义时,字符串文字类型的字段分配错误
- python - django ModelAdmin 中的高级查询集。AttributeError:“dict”对象没有属性“_meta”
- php - Laravel 代码清理不需要的对象属性并仅提取 laravel 5.4 中需要的属性?
- webpack - 如何在 Vue 应用程序的头部有条件地添加代码
- c# - 同一列上具有多个外键的实体框架核心
- amazon-web-services - 在 AWS lambda 失败时添加重试逻辑,如果仍然失败发送警报
- node.js - Azure Web App for Containers 未设置环境变量
- javascript - 是否可以创建一个不可编辑的 JavaScript 对象?
- css - Angular 6:如何动态更改页面背景颜色