python - 熊猫:按列表分组
问题描述
我发现了一个按列表对 pandas 进行分组的示例
import pandas as pd
import numpy as np
rng = np.random.RandomState(0)
df = pd.DataFrame({'key': ['A', 'B', 'C', 'A', 'B', 'C'],
'data1': range(6),
'data2': rng.randint(0, 10, 6)},
columns = ['key', 'data1', 'data2'])
L = [0, 1, 0, 1, 2, 0]
print(df); print(df.groupby(L).sum())
输出是:
key data1 data2
0 A 0 5
1 B 1 0
2 C 2 3
3 A 3 3
4 B 4 7
5 C 5 9
data1 data2
0 7 17
1 4 3
2 4 7
我不明白如何按列表进行分组。为什么我得到这样的结果?
解决方案
groupby 所做的是在聚合之前获取df
该对中的行以及 中的每个值L
:
配对:
0
与,1
第 0、2、5 行配对,与第 1 行和第 3 行配对,而 2 与第 4 行配对。您可以从 groupby 中看到:
[*df.groupby(L)]
Out[111]:
[(0,
key data1 data2
0 A 0 5
2 C 2 3
5 C 5 9),
(1,
key data1 data2
1 B 1 0
3 A 3 3),
(2,
key data1 data2
4 B 4 7)]
一旦确定配对,聚合就可以进行。请注意,因为它是sum
,所以只保留数字列。在未来的 pandas 版本中,您可能必须明确声明要聚合的列。
另请注意,L 的长度必须与行数匹配,df
否则 groupby 将失败。
推荐阅读
- javascript - 如何测试普通的 Vue 组件(不是单个文件组件)
- corda - 升级 Corda Flow 会导致下次运行出错:TransactionVerificationException$ContractConstraintRejection
- python - Python-ldap 绑定
- python - Quickfix 数据字典问题 - 重复组错误
- javascript - laravel 集合中的 javascript 变量(输入索引)
- python - 如果找不到特定字符串,如何遍历数据帧列表并删除所有数据
- dialogflow-es - 尝试从 Dialogflow 下载意图,然后将其导入 Amazon Lex
- matplotlib - 保存为 png 时如何增加子图的填充(空白)?
- javascript - 在 ffmpeg AWS Lambda 层中使用 ffprobe 输出文件详细信息
- ruby-on-rails - Devise Gem Ruby On Rails - 为管理员移除“取消我的帐户”