我想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
我已经为此阅读了文档。显然你可以使用transform
or apply
。在样本中,似乎保留了分组结构。
也许它与某些东西有关pd.to_numeric
?所以我尝试了:
frame.groupby("type")["number"].apply(lambda x: int(x))
这会导致 TypeError:
TypeError:无法将系列转换为
显然,应用程序将整个组作为参数。每组的结果似乎都连接到一个数据帧中。
是否可以以保持分组结构的方式使用 apply ?我想要一个调用,将函数应用于组内的每一列并保留组。然后我可以链接电话。
我发现的一个相关问题是: pandas: sample groups after groupby
但答案建议在分组之前应用该功能。这不适用于链接功能。而对于像mean()
.