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 中嵌套这个数据框:
我认为这是最接近的:
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)