python - Pandas 数据框转换
问题描述
考虑一个如下所示的数据框:
A B C
0 2018-10-13 100 50
1 2018-10-13 200 25
2 2018-10-13 300 10
3 2018-10-13 400 5
4 2018-10-13 500 0
5 2018-10-14 100 100
6 2018-10-14 200 50
7 2018-10-14 300 25
8 2018-10-14 400 10
9 2018-10-14 500 5
10 2018-10-15 100 150
11 2018-10-15 200 100
12 2018-10-15 300 50
13 2018-10-15 400 25
14 2018-10-15 500 10
我要执行的转换是:
- GroupBy A 列
- 然后 GroupBy 列 B 分成 3 个区间( [0,100] 说intval-1, [101,200] 说intval-2, [201,end] 说intval-3 ]。可以是 n 个区间来概括。
- 对 C 列执行求和聚合
所以我的转换/旋转数据框应该像
A intval-1 intval-2 intval-3
0 2018-10-13 50 25 15
1 2018-10-14 100 50 40
2 2018-10-13 150 100 85
实现这一点的简单方法将有很大帮助。
谢谢你。
解决方案
你可以cut
,然后pivot_table
:
bin_lst = [0, 100, 200, np.inf]
cut_b = pd.cut(df['B'], bins=bin_lst,
labels=[f'intval-{i}' for i in range(1, len(bin_lst))])
res = df.assign(B=cut_b)\
.pivot_table(index='A', columns='B', values='C', aggfunc='sum')
print(res)
B intval-1 intval-2 intval-3
A
2018-10-13 50 25 15
2018-10-14 100 50 40
2018-10-15 150 100 85
推荐阅读
- questdb - QuestDB 是否支持外键、主键、引用?
- css - 如何在网站打开时进行放大功能
- javascript - 关于 javascript 中的承诺的澄清
- sql - DELETE 语句与 SQL 存储过程中的引用约束冲突
- python - 在 Pyhton Django 中使用验证器 = SHA1 和解密 =“AES” 验证由 C sharp 生成的 Oauth2 不记名令牌
- python - 我不太明白为什么我不能用 Django 访问 URL
- sql - Postgresql 中“TYPE”或附近的语法错误
- linux - 我遇到一个错误“清除签名的文件无效,得到'NOSPLIT'(网络是否需要身份验证?)”
- amazon-web-services - Kubernetes 预计服务帐户令牌到期时间问题
- asp.net-core - RabbitMQ MassTransit 集群问题