首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Patsy中创建自定义函数

在Patsy中创建自定义函数
EN

Stack Overflow用户
提问于 2018-06-12 01:10:27
回答 2查看 270关注 0票数 0
代码语言:javascript
复制
import patsy
from patsy import dmatrices, dmatrix, demo_data
dt=pd.DataFrame({'F1':['a','b','c','d','e','a'],'F2':['X','X','Y','Y','Z','Z']})

我知道我能做到

代码语言:javascript
复制
dmatrix("1+I(F1=='a')",dt)

但是我能创造一个任意的函数吗?在R中,我试图模仿公式语言中相同级别的灵活性,但在python中,它似乎不是直接实现的。

代码语言:javascript
复制
def abd(x):
    1 if x in ['a','b','d'] else 0

dmatrix("1+abd(F1)",dt)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-12 01:32:05

IIUC

代码语言:javascript
复制
def abd(x):
    return x.isin(['a','b','d'])
dmatrix("1+abd(F1)",dt)
Out[182]: 
DesignMatrix with shape (6, 2)
  Intercept  abd(F1)[T.True]
          1                1
          1                1
          1                0
          1                1
          1                0
          1                1
  Terms:
    'Intercept' (column 0)
    'abd(F1)' (column 1)
票数 1
EN

Stack Overflow用户

发布于 2018-06-14 03:05:31

我测试了更接近于建立在R公式体系中的东西。下面是被接受的答案的更简单的表示。Python通过设计提供了这样的灵活性。R当然可以做同样的事情(自定义函数),但是它更容易被忽略。

代码语言:javascript
复制
import pandas as pd
from patsy import dmatrices, dmatrix, demo_data

dt=pd.DataFrame({'F1':['a','b','c','d','e','a'],'F2':['X','X','Y','Y','Z','Z']})
def xx(x,y):return(np.isin(x,list(y))*1)
dmatrix("1+xx(F1,['a','b'])",dt)

DesignMatrix with shape (6, 2)
  Intercept  xx(F1, ['a', 'b'])
      1                   1
      1                   1
      1                   0
      1                   0
      1                   0
      1                   1
  Terms:
    'Intercept' (column 0)
    "xx(F1, ['a', 'b'])" (column 1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50807990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档