首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应用带有两个数据字段的函数

应用带有两个数据字段的函数
EN

Stack Overflow用户
提问于 2020-02-25 13:09:55
回答 2查看 73关注 0票数 3

我有这样一个dataframe (创建一个示例dataframe);

代码语言:javascript
复制
df = pd.DataFrame({'language': ['ruby','ruby','ruby', np.nan,'ruby'],
                   'top_lang_owned': [['ruby', 'javascript', 'go'], 
                                      ['ruby', 'coffeescript'],
                                      ['javascript', 'coffeescript'],
                                      ['ruby', 'shell', 'go'],
                                      np.nan],
                   'top_lang_watched': [['ruby','go'], 
                                      ['javascript'],
                                      np.NaN,
                                      ['ruby', 'shell'],
                                      np.nan]})
df

language top_lang_owned top_lang_watched 0 ruby ruby,javascript,go 1 ruby ruby,coffeescript 2 ruby javascript,coffeescript NaN 3 NaN ruby,shell,go 4 ruby NaN NaN

代码语言:javascript
复制
dataframe.info();

RangeIndex: 5个条目,0到4个数据列(共2列):语言4非空对象top_lang_owned 4非空对象dtype:对象(2)内存使用: 208.0+字节

我想添加一个比较两个字段值的字段。(伪码)

代码语言:javascript
复制
if ("language" is in "top_lang_owned") 
then new_field = 1 othervise new_field = 0.

例如,所需的输出必须在以下;

语言top_lang_owned top_lang_watched is_owned is_watched 0 ruby ruby,javascript,go 1 1 1 ruby ruby,coffeescript 1 0 2 ruby javascript,coffeescript NaN 0 0 3 NaN ruby,shell,go NaN NaN 4 ruby NaN

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-25 13:16:54

你当然可以这样做,这是你可能要尝试的代码,

编辑:

代码语言:javascript
复制
def func(x):
    if x.language in x.top_lang_owned:
        return 1
    return 0

df['is_in_lang'] = df[~df.isna().any(1)].apply(func, axis=1)

输出:

代码语言:javascript
复制
    id language                    top_lang_owned  is_in_lang
0   21     ruby            [ruby, javascript, go]           1
1   25     ruby  [javascript, ruby, coffeescript]           1
2   38     ruby        [javascript, coffeescript]           0
3  108      NaN                 [ruby, shell, go]           NaN
4  173     ruby                               NaN           NaN
票数 3
EN

Stack Overflow用户

发布于 2020-02-25 15:12:18

您可以筛选NA并应用以下条件:

代码语言:javascript
复制
df['is_in_lang'] = df[~df.isna().any(1)].apply(lambda x: 1 if x['language'] in x['top_lang_owned'] else 0, 1)

  language                    top_lang_owned  is_in_lang
0     ruby            [ruby, javascript, go]         1.0
1     ruby  [javascript, ruby, coffeescript]         1.0
2     ruby        [javascript, coffeescript]         0.0
3      NaN                 [ruby, shell, go]         NaN
4     ruby                               NaN         NaN
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60395408

复制
相关文章

相似问题

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