python - 如何聚合某些列,同时将其他列保留在 Python 中
问题描述
我有一个数据集,其中包含>100 variables
但为了说明问题,我将其简化如下。
我想groupby()
colA
, colB
and sum()
colD
, 同时采用 and 的不同colC
值colE
我已经尝试过以下方法,但正如您所知,这只会返回我分组的列以及我总结的列并且永远不会返回colC
并且colE
方法1:
df.groupby(['colA','colB').aggregate({'colC': sum})
方法2:我可以像上面那样聚合它们,然后稍后将其加入同一个表以获得结果。
方法 3:在 groupby 中包含所有列,但是当我这样做时,我无法按Missing
您可以在其中看到的值进行分组colE
我有哪些选择?
更正 更新:我刚刚更正了我之前提供数据的方式,这是不正确的
data = [
["25-5-19", "cat1", "cat3", 10, 1],
["25-5-19", "cat1", "cat3", 20, 1],
["25-5-19", "cat1", "cat3", 30, 1],
["26-5-19", "cat2", "cat4", 50, 2],
["26-5-19", "cat2", "cat4", 100, 2],
["26-5-19", "cat2", "cat4", 10, 2],
["27-5-19", "cat1", "cat5", 40, None],
["27-5-19", "cat1", "cat5", 60, None]
]
`
解决方案
我想 groupby() colA,colB 和 sum() colD,同时采用 colC 和 colE 的不同值
所以我相信你可以set
在聚合器中使用,reset_index()
完成后:
# dataframe data from example (+ extra `cat1` in ColC)
data = [
["25-5-19", "cat1", "cat1", 10, 1],
["25-5-19", "cat1", "cat3", 20, 1],
["25-5-19", "cat1", "cat3", 30, None],
["26-5-19", "cat2", "cat4", 50, 2],
["26-5-19", "cat2", "cat4", 100, 2],
["26-5-19", "cat2", "cat4", 10, 2]
]
df = pd.DataFrame(data, columns = ['colA', 'colB', 'colC', 'colD', 'colE'])
# aggregator sums over `colD` and gets distinct values of `colC` and `colE`
df.groupby(['colA', 'colB']).aggregate({'colD': sum, 'colC': set, 'colE': set}).reset_index()
| - | colA |colB | colE | colD | colC |
|---|-------|-------|--------------|--------|---------------|
|0 |25-5-19| cat1 | {nan, 1.0} | 60 | {cat3, cat1} |
|1 |26-5-19| cat2 | {2.0} | 160 | {cat4} |
推荐阅读
- cmake - 使用 CMake 添加带有生成的源文件的库
- python - 为什么我只能下载 51 张图片而不是 151 张图片,为什么没有显示错误?
- javascript - 如何在 JavaScript 中找到等于给定总和的三元组的所有可能组合?(“星星和酒吧”或“球和垃圾箱”问题)
- python - 在熊猫中创建总列的百分比
- ruby-on-rails - RubyMine 没有显示具有树结构的项目文件夹,它显示了排除文件的树结构
- ios - 在 React Native 中访问 Apple 的 Memoji 键盘
- c++ - 将模板的模板成员类型作为模板模板参数传递
- powershell - Powershell通用集合列表不显示多个对象
- go - 嵌套切片未更新
- mapbox - 如何从弹出的地图框中删除“x”(关闭)符号