python - pandas groupby 应用返回一个数据框
问题描述
考虑以下代码:
>>> df = pd.DataFrame(np.random.randint(0, 4, 16).reshape(4, 4), columns=list('ABCD'))
... df
...
A B C D
0 2 1 0 2
1 3 0 2 2
2 0 2 0 2
3 2 1 2 0
>>> def grouper(frame):
... return frame
...
... df.groupby('A').apply(grouper)
...
A B C D
0 2 1 0 2
1 3 0 2 2
2 0 2 0 2
3 2 1 2 0
如您所见,结果是相同的。这里是文档apply
:
传递给 apply 的函数必须将数据框作为其第一个参数并返回数据框、系列或标量。apply 然后将负责将结果组合回单个数据框或系列中。apply 因此是一种高度灵活的分组方法。
Groupby 会将组划分为如下的小数据帧:
A B C D
2 0 2 0 2
A B C D
0 2 1 0 2
3 2 1 2 0
A B C D
1 3 0 2 2
apply
文档说它将数据帧组合回单个数据帧。我很好奇它是如何以最终结果与原始数据框相同的方式组合它们的。如果它使用concat
了 ,则最终数据帧将等于:
A B C D
2 0 2 0 2
0 2 1 0 2
3 2 1 2 0
1 3 0 2 2
我很好奇这种串联是如何完成的。
解决方案
如果您查看源代码,您会看到有一个参数not_indexed_same
可以检查 groupby 之后索引是否保持不变。如果相同,则 groupby 在返回结果之前重新索引数据帧。我不知道为什么要这样做。
更改于 2011 年 8 月 21 日进行,Wes 未对更改发表评论:https ://github.com/pandas-dev/pandas/commit/00c8da0208553c37ca6df0197da431515df813b7#diff-720d374f1a709d0075a1f0a02445cd65
推荐阅读
- java - 如何在 Java AWS S3 SDK 预签名 URL 中设置策略条件
- r - 在数据框中查找具有百分比值的列,并在更改列名时将值转换为数字
- c# - IIS在c#中使用的发布文件夹
- php - 如何遍历语句结果以插入 PHP 中的关联数组
- java - 如何防止仅在休眠中的子表中进行更新操作(一对多映射单向)?
- c++ - 排序行为前后的列表和迭代器
- javascript - FileReader - 获取图像并转换为 base64
- json - 解码 JSON 键数组
- javascript - daysEl 为空 Javascript
- postgresql - 如何使用 Node.js 中的 Lambda 函数从 Amazon RDS 获取数据?