首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫:比较数据框架的列,并根据条件添加一个新的列&值

熊猫:比较数据框架的列,并根据条件添加一个新的列&值
EN

Stack Overflow用户
提问于 2019-11-12 12:07:23
回答 1查看 44关注 0票数 1

我有一个数据框架,

代码语言:javascript
复制
ip_df:
     name class    sec    details
0    tom  I        a      [{'class':'I','sec':'a','subjects':['numbers','ethics']},{'class':'I','sec':'b','subjects':['numbers','moral-science']},{'class':'I','sec':'c','subjects':['moral-science','ethics']},{'class':'I','subjects':['numbers','ethics1']}]
1    sam  I        d      [{'class':'I','sec':'a','subjects':['numbers','ethics']},{'class':'I','sec':'b','subjects':['numbers','moral-science']},{'class':'I','sec':'c','subjects':['moral-science','ethics']},{'class':'I','subjects':['numbers','ethics1']}] 

由此产生的数据框架应该是,

代码语言:javascript
复制
op_df:
      name  class  sec   subjects
0     tom   I      a     ['numbers','ethics']
1     sam   I      d     ['numbers','ethics1']

"op_df“必须以以下条件为基础,

“value

  • Condition”条件1:检查“详细信息”列中是否存在“类”和"sec“,如果存在,则添加一个名为"subjects”的新列及其各自的2:如果"details“列中不存在"class”和"sec“,则检查”类“是否匹配,如果匹配,则在”条件1“和条件2中添加一个名为"subjects”的新列及其各自的值
  • ,在"subjects“列中添加默认值为0,0。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-12 12:33:31

如果需要的话,解决方案首先由nextiter两种条件匹配值来添加默认值[0, 0],如果没有匹配的话:

代码语言:javascript
复制
final = []
for a, b, c in zip(df['class'], df['sec'], df['details']):
    out = []
    for x in c:
        m1 = x['class'] == a 
        if m1 and x.get('sec') == b:
            out.append(x['subjects'])
        elif m1 and 'sec' not in list(x.keys()):
            out.append(x['subjects'])
    final.append(next(iter(out), [0,0]))

df['subjects'] =  final
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58818418

复制
相关文章

相似问题

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