【问题标题】:Tidyverse's Nested Dataframes workflow in the PandasTidyverse 在 Pandas 中的嵌套数据框工作流程
【发布时间】:2021-06-12 09:18:05
【问题描述】:

在 pandas 中使用嵌套数据框的最佳工作流程是什么? Tidyverse 允许使用嵌套数据框实现出色的工作流程,从而为我们节省了很多周期。

但是,对于 Pandas,API 还没有完全到位。

让我们考虑R中的一个例子:

library(tidyverse)

df <- iris

model <- function(df) {
  model <- lm(Sepal.Length ~ Sepal.Width + Petal.Length, data = df)
  return(model)
}

nested <- 
  df %>% 
  group_by(Species) %>% 
  nest()

nested %>% 
  mutate(res = map(data, ~model(.)))

Pandas 中的等价物是什么?

import pandas as pd
import seaborn as sns

df = sns.load_dataset('iris')

【问题讨论】:

  • 你的代码对熟悉这个概念的人来说是有意义的。请与预期输出共享示例数据框。并让 python/pandas 空间内的人理解它

标签: python r pandas dataframe tidyverse


【解决方案1】:

你可以使用datar:

>>> from datar.datasets import iris as df
>>> from datar.all import f, group_by, nest, mutate
>>> from pipda import register_func
>>> 
>>> class Model:
...     def __init__(self, data):
...         ...
... 
>>> @register_func(None)
... def model(data):
...     # define your own model, or compute the model using other libraries
...     return [Model(dat) for dat in data]
... 
>>> nested = df >> group_by(f.Species) >> nest()
>>> nested
      Species       data
     <object>   <object>
0      setosa  <DF 50x4>
1  versicolor  <DF 50x4>
2   virginica  <DF 50x4>

[Groups: Species (n=3)]
>>> 
>>> nested >> mutate(res=model(f.data))
      Species       data                                        res
     <object>   <object>                                   <object>
0      setosa  <DF 50x4>  <__main__.Model object at 0x7f28ca974e90>
1  versicolor  <DF 50x4>  <__main__.Model object at 0x7f28ca9a5890>
2   virginica  <DF 50x4>  <__main__.Model object at 0x7f28ca9a5a10>

[Groups: Species (n=3)]

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

【讨论】:

    猜你喜欢
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 2014-06-06
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多