3

我想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

我已经为此阅读了文档。显然你可以使用transformor apply。在样本中,似乎保留了分组结构。

也许它与某些东西有关pd.to_numeric?所以我尝试了:

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

这会导致 TypeError:

TypeError:无法将系列转换为

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

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

我发现的一个相关问题是: pandas: sample groups after groupby

但答案建议在分组之前应用该功能。这不适用于链接功能。而对于像mean().

4

1 回答 1

1

您在这里收到的消息和行为是因为您实际上是在调用 : pd.core.groupby.SeriesGroupBy.apply(self, func, *args, **kwargs)而不是Series.applyor DataFrame.apply

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

它似乎与此处描述的案例 #3 相对应。

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

是的

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

取决于上面链接的案例

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

您必须提供更多关于您正在努力实现的目标的详细信息,但aggregate或者transform看起来确实是不错的候选人

于 2018-01-16T21:59:16.173 回答