有没有类似于tidyr nest函数的pandas函数?

11

R语言中的tidyr::unnest方法在pandas中有一个等效方法,称为explode,详见这个非常详细的答案。我想知道是否有与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代码:

import seaborn
iris = seaborn.load_dataset("iris")

如何在pandas中嵌套数据框:

  1. 首先以较简单的方式(与pandas explode功能相当)嵌套一个包含简单列表的数据列
  2. 其次,数据列包含如上例所示的数据框
2个回答

4

使用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相匹配。

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


4

我认为这是最接近的:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接