开发者社区> 问答> 正文

根据条件在数据框中创建新列

对于数据框df:

dummy_data1 = {'category': ['White', 'Black', 'Hispanic','White'],
           'Pop':['75','85','90','100'],'White_ratio':[0.6,0.4,0.7,0.35],'Black_ratio':[0.3,0.2,0.1,0.45], 'Hispanic_ratio':[0.1,0.4,0.2,0.20]    }
df = pd.DataFrame(dummy_data1, columns = ['category', 'Pop','White_ratio', 'Black_ratio', 'Hispanic_ratio'])

我想通过首先检查类别,然后将“ Pop”中的值乘以列中的相应比率值,来向此数据框添加一个新列“ pop_n”。对于第一行,类别为“白色”,因此应将75乘以0.60并将45放入pop_n列。我想到写类似的东西:

df['pop_n']= (df['Pop']\*f['White_ratio']).where(df['category']=='W')

这有效,但仅适用于一个类别。我将不胜感激。

谢谢。

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 23:47:49 565 0
1 条回答
写回答
取消 提交回答
  • 使用DataFrame.filterDataFrame.lookup

    首先,我们使用filter来获取名称中带有ratio的列。然后拆分并保留第一个单词仅在下划线之前。

    最后,我们使用lookupcategory值匹配到这些列。

    # df['Pop'] = df['Pop'].astype(int)
    df2 = df.filter(like='ratio').rename(columns=lambda x: x.split('_')[0])
    df['pop_n'] = df2.lookup(df.index, df['category']) * df['Pop']
    
    
    
       category  Pop  White_ratio  Black_ratio  Hispanic_ratio  pop_n
    0     White   75         0.60         0.30             0.1   45.0
    1     Black   85         0.40         0.20             0.4   17.0
    2  Hispanic   90         0.70         0.10             0.2   18.0
    3     White  100         0.35         0.45             0.2   35.0
    

    回答来源:stackoverflow

    2020-03-24 23:47:57
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载