python - 在“groupby”语句中使用新分配的列?(与 Pandas 链接的方法)
问题描述
我是一名 R ( dplyr
) 用户,正在学习如何使用pandas
. 我正在练习使用风力涡轮机数据集,我希望能够返回一个数据框,其中包含自 2000 年以来不列颠哥伦比亚每年的制造商数量。
下面的块返回一个错误NameError: name 'year' is not defined
。year
在这种情况下,有没有办法将新生成的列通过管道传输到groupby
一个链中的语句中?
import pandas as pd
wind_raw = pd.read_csv(
"https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-10-27/wind-turbine.csv"
)
(
wind_raw
.loc[:,['province_territory', 'manufacturer', 'commissioning_date']]
.assign(year = wind_raw.commissioning_date.str.replace(r'(\d{4})(\/\d{4})*', r'\1'))
.assign(year = lambda row: pd.to_datetime(row.year))
.query('province_territory == "British Columbia" and year >= 2000')
.groupby(wind_raw.manufacturer, year)
.size()
)
解决方案
你几乎明白了,你只需要改变groupby
参数:
(
wind_raw
.loc[:,['province_territory', 'manufacturer', 'commissioning_date']]
.assign(year = wind_raw.commissioning_date.str.replace(r'(\d{4})(\/\d{4})*', r'\1'))
.assign(year = lambda row: pd.to_datetime(row.year))
.query('province_territory == "British Columbia" and year >= 2000')
.groupby(["manufacturer", "year"])
.size()
)
输出
manufacturer year
Enercon 2009-01-01 34
2019-01-01 4
GE 2017-01-01 61
Leitwind 2010-01-01 1
Senvion 2017-01-01 10
Vestas 2011-01-01 48
2012-01-01 79
2014-01-01 55
此外,还有几件事可以简化:
(
wind_raw[['province_territory', 'manufacturer']]
.assign(year = wind_raw.commissioning_date.str.extract("(\d{4})").astype(int))
.query('province_territory == "British Columbia" and year >= 2000')
.groupby(["manufacturer", "year"])
.size()
)
推荐阅读
- android - BOOT_COMPLETED 不适用于华为设备
- ios - GoogleWebRTC 音频视频通话 iOS
- subquery - 如何使用 FROM 子句中的子查询优化 MariaDB 查询?
- sql-server - 如何获取时态表历史记录中的最新行
- python - 如何使用 python SDK couchbase 将 n1ql 的结果插入存储桶
- node.js - 当我们为微服务使用分子框架时,如何实现 swagger
- iot - 集群中的 ThingsBoard 服务器如何相互通信?
- sparql - 从 SPARQL 端点加载 Protege 中的本体
- ios - 我正在尝试使用 Swift Codable 从 subreddit 解析 JSON。为什么我的对象返回零?
- unit-testing - 业力测试用例多次运行:Angular 单元测试