簡體   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