有没有相当于潮汐巢功能的大熊猫?

时间:2019-11-27 10:46:14

标签: python r pandas tidyverse

R语言中的tidyr::unnest方法在熊猫中是等效的,它被称为explode,如this very detailed answer中所述。 我想知道是否有与̀tidyr :: nest`方法等效的方法。

R代码示例:

library(tidyr)
iris_nested <- as_tibble(iris) %>% nest(data=-Species)

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

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]

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

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]]

示例python代码:

from sklearn import datasets
iris = datasets.load_iris()

如何在熊猫中嵌套此数据框:

  1. 首先,以一种不太复杂的方式(使用pandas explode功能),数据列包含一个简单列表
  2. 第二个数据列包含如上例所示的数据帧

2 个答案:

答案 0 :(得分:3)

我认为这是最接近的:

df=iris.groupby("Species").apply(lambda x:dict(x))

输出:

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...

要访问一种物种:

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

答案 1 :(得分:1)

使用 datar 很容易做到:

>>> from datar.all import f, nest
>>> from datar.datasets import iris
>>> iris_nested = iris >> nest(data=~f.Species)
>>> iris_nested
      Species       data
     <object>   <object>
0      setosa  <DF 50x4>
1  versicolor  <DF 50x4>
2   virginica  <DF 50x4>
>>> iris_nested.iloc[0, 1]
    Sepal_Length  Sepal_Width  Petal_Length  Petal_Width
       <float64>    <float64>     <float64>    <float64>
0            5.1          3.5           1.4          0.2
1            4.9          3.0           1.4          0.2
2            4.7          3.2           1.3          0.2
3            4.6          3.1           1.5          0.2
4            5.0          3.6           1.4          0.2
5            5.4          3.9           1.7          0.4
6            4.6          3.4           1.4          0.3
7            5.0          3.4           1.5          0.2
8            4.4          2.9           1.4          0.2
9            4.9          3.1           1.5          0.1
10           5.4          3.7           1.5          0.2
11           4.8          3.4           1.6          0.2
12           4.8          3.0           1.4          0.1
13           4.3          3.0           1.1          0.1
14           5.8          4.0           1.2          0.2
15           5.7          4.4           1.5          0.4
16           5.4          3.9           1.3          0.4
17           5.1          3.5           1.4          0.3
18           5.7          3.8           1.7          0.3
19           5.1          3.8           1.5          0.3
20           5.4          3.4           1.7          0.2
21           5.1          3.7           1.5          0.4
22           4.6          3.6           1.0          0.2
23           5.1          3.3           1.7          0.5
24           4.8          3.4           1.9          0.2
25           5.0          3.0           1.6          0.2
26           5.0          3.4           1.6          0.4
27           5.2          3.5           1.5          0.2
28           5.2          3.4           1.4          0.2
29           4.7          3.2           1.6          0.2
30           4.8          3.1           1.6          0.2
31           5.4          3.4           1.5          0.4
32           5.2          4.1           1.5          0.1
33           5.5          4.2           1.4          0.2
34           4.9          3.1           1.5          0.2
35           5.0          3.2           1.2          0.2
36           5.5          3.5           1.3          0.2
37           4.9          3.6           1.4          0.1
38           4.4          3.0           1.3          0.2
39           5.1          3.4           1.5          0.2
40           5.0          3.5           1.3          0.3
41           4.5          2.3           1.3          0.3
42           4.4          3.2           1.3          0.2
43           5.0          3.5           1.6          0.6
44           5.1          3.8           1.9          0.4
45           4.8          3.0           1.4          0.3
46           5.1          3.8           1.6          0.2
47           4.6          3.2           1.4          0.2
48           5.3          3.7           1.5          0.2
49           5.0          3.3           1.4          0.2

它与 dplyr/tidyr API 一致。

我是包的作者。如果您有任何问题,请随时提交问题。