是否有相当于 tidyr nest 功能的熊猫?

Pau*_*eux 9 python r pandas tidyverse

tidyr::unnestR 语言中的方法与 Pandas 中的等效方法相同explode如此非常详细的答案中所述。我想知道是否有等效于 ?tidyr::nest` 的方法。

示例 R 代码:

library(tidyr)
iris_nested <- as_tibble(iris) %>% nest(data=-Species)
Run Code Online (Sandbox Code Playgroud)

数据列是一个列表列,其中包含数据框(这对于建模非常有用,例如在运行多个模型时)。

iris_nested
# A tibble: 3 x 2
  Species              data
  <fct>      <list<df[,4]>>
1 setosa           [50 × 4]
2 versicolor       [50 × 4]
3 virginica        [50 × 4]
Run Code Online (Sandbox Code Playgroud)

要访问数据列中的一个元素:

iris_nested[1,'data'][[1]]
[...]
# A tibble: 50 x 4
   Sepal.Length Sepal.Width Petal.Length Petal.Width
          <dbl>       <dbl>        <dbl>       <dbl>
 1          5.1         3.5          1.4         0.2
 2          4.9         3            1.4         0.2
 3          4.7         3.2          1.3         0.2
 4          4.6         3.1          1.5         0.2
 5          5           3.6          1.4         0.2
 6          5.4         3.9          1.7         0.4
 7          4.6         3.4          1.4         0.3
 8          5           3.4          1.5         0.2
 9          4.4         2.9          1.4         0.2
10          4.9         3.1          1.5         0.1
# … with 40 more rows
library(tidyr)
iris_nested <- as_tibble(iris) %>% nest(data=-Species)
iris_nested
iris_nested[1,'data'][[1]]
Run Code Online (Sandbox Code Playgroud)

示例python代码:

import seaborn
iris = seaborn.load_dataset("iris")
Run Code Online (Sandbox Code Playgroud)

如何在 Pandas 中嵌套这个数据框:

  1. 首先,以一种不太复杂的方式(在使用熊猫爆炸功能的情况下),数据列包含一个简单的列表
  2. 其次,数据列包含数据框,如上例所示

Bil*_*ros 4

我认为这是最接近的:

df=iris.groupby("Species").apply(lambda x:dict(x))
Run Code Online (Sandbox Code Playgroud)

输出:

Species
setosa        {'Sepal.Length': [5.1, 4.9, 4.7, 4.6, 5.0, 5.4...
versicolor    {'Sepal.Length': [7.0, 6.4, 6.9, 5.5, 6.5, 5.7...
virginica     {'Sepal.Length': [6.3, 5.8, 7.1, 6.3, 6.5, 7.6...
Run Code Online (Sandbox Code Playgroud)

要访问其中一种物种:

pd.DataFrame(df['setosa'])


     Sepal.Length  Sepal.Width  Petal.Length  Petal.Width Species
100           5.1          3.5           1.4          0.2  setosa
101           4.9          3.0           1.4          0.2  setosa
102           4.7          3.2           1.3          0.2  setosa
103           4.6          3.1           1.5          0.2  setosa
104           5.0          3.6           1.4          0.2  setosa
105           5.4          3.9           1.7          0.4  setosa
106           4.6          3.4           1.4          0.3  setosa
107           5.0          3.4           1.5          0.2  setosa
108           4.4          2.9           1.4          0.2  setosa
109           4.9          3.1           1.5          0.1  setosa
110           5.4          3.7           1.5          0.2  setosa
111           4.8          3.4           1.6          0.2  setosa
112           4.8          3.0           1.4          0.1  setosa
113           4.3          3.0           1.1          0.1  setosa
114           5.8          4.0           1.2          0.2  setosa
115           5.7          4.4           1.5          0.4  setosa
116           5.4          3.9           1.3          0.4  setosa
117           5.1          3.5           1.4          0.3  setosa
118           5.7          3.8           1.7          0.3  setosa
119           5.1          3.8           1.5          0.3  setosa
120           5.4          3.4           1.7          0.2  setosa
121           5.1          3.7           1.5          0.4  setosa
122           4.6          3.6           1.0          0.2  setosa
123           5.1          3.3           1.7          0.5  setosa
124           4.8          3.4           1.9          0.2  setosa
Run Code Online (Sandbox Code Playgroud)