繁体   English   中英

根据另一列拆分pandas DataFrame列的最短方法

[英]Shortest way of splitting a pandas DataFrame column based on another column

灵感

在R中,这非常容易

data("iris")
bartlett.test(Sepal.Length ~ Species,data = iris)

关于数据集的重要一点是,Sepal.Length列是数字,种类是分类的。

问题

在Python中, scipy.stats.bartlett对于每种物种都需要单独的数组,请参阅docs

实现这一目标的最简单方法是什么?

在python中获取数据集的简单方法:

from sklearn import datasets
iris = datasets.load_iris()
iris = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
                     columns= ["sepal.length","sepal.width","petal.length","petal.width"] + ['species'])

我真的希望它能工作:

iris.groupby("species")["sepal.length"].apply(ss.bartlett)

但这并不是因为它需要多个样本向量。

按照groupby模式,您可以进行一些操作并执行以下操作:

gb = iris.groupby('species')["sepal.length"]
ss.bartlett(*[gb.get_group(x).values for x in gb.groups])

*将列表解压缩到函数中,剩下的只是将组以正确的形式放入函数中。 如评论中所述,此处不需要.values ,因此我们可以将其编写为:

gb = iris.groupby('species')["sepal.length"]
ss.bartlett(*[gb.get_group(x) for x in gb.groups])

只是为了完成,如果您真的想一行完成:

ss.bartlett(*[x[1] for x in iris.groupby('species')["sepal.length"]])

但我个人认为它的可读性较差。

暂无
暂无

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

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