繁体   English   中英

大熊猫,申请后保持分组

[英]pandas, keep groupby groups after apply

我想在数据groupby上使用groupby ,然后在每个组上使用apply链接一系列函数调用。

作为第一个原型,我建立了一个示例,其中将数据框的条目从字符串转换为数字。 数据框如下所示:

frame = pd.DataFrame({
    "number": ["1", "2", "3", "4", "5", "6", "7", "8"], 
    "type": ["a",] * 4 + ["b",] * 4})

结果数据框为:

数据框的结构

此数据框中的数字是字符串。 因此,在我可以使用任何数学运算之前,必须将它们转换为数值类型。 那就是我想要做的事情:

frame.groupby("type")["number"].apply(pd.to_numeric)

但是结果是包含所有项目的单个系列:

0    1
1    2
2    3
3    4
4    5
5    6
6    7
7    8
Name: number, dtype: int64

我已经阅读了文档 显然,您可以使用transformapply 在样本中,似乎保留了分组的结构。

也许与pd.to_numeric有关? 所以我尝试了:

frame.groupby("type")["number"].apply(lambda x: int(x))

这导致TypeError:

TypeError:无法将系列转换为

显然,应用程序将整个组作为参数。 每一组的结果似乎都连接到一个数据帧中。

是否可以以保持分组结构的方式使用Apply? 我想要一个将函数应用于组中每个列并保留组的调用。 然后,我可以将电话链接起来。

我发现一个相关的问题是: 熊猫:groupby之后的样本组

但是答案建议在分组之前应用该功能。 与链式功能搭配使用时效果不佳。 而且一点也不像mean()这样的东西。

您到达此处的消息和行为是因为您实际上在调用: pd.core.groupby.SeriesGroupBy.apply(self, func, *args, **kwargs)而不是Series.applyDataFrame.apply

但是结果是包含所有项目的单个系列:

这似乎与此处所述的案例3相符。

显然,应用程序将整个组作为参数。

每一组的结果似乎都连接到一个数据帧中。

取决于上面链接的情况

是否可以以保持分组结构的方式使用Apply? 我想要一个将函数应用于组中每个列并保留组的调用。 然后,我可以将电话链接起来。

您必须提供有关要实现的目标的更多详细信息,但aggregatetransform确实是不错的候选人

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM