前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pandas的apply操作

pandas的apply操作

作者头像
机器学习和大数据挖掘
发布2019-07-01 18:23:37
7110
发布2019-07-01 18:23:37
举报
文章被收录于专栏:数据挖掘数据挖掘

pandas的apply操作类似于Scala的udf一样方便,假设存在如下dataframe

  id_part                  pred               pred_class v_id
0       d  [0.722817, 0.650064]                  cat,dog   d1
1       5  [0.119208, 0.215449]  other_label,other_label   d2

需要把 v_id=d1 中,predpred_class 一一对应,需要将 pred 大于0.5的pred_class取出来作为新的一列,如果小于0.5则不取出来:

import pandas as pd


# 提取类别
def get_pred_class(pred_class, pred):
    pred_class_list = pred_class.split(",")
    result_class_list = []
    for i in range(0, len(pred)):
        if float(pred[i]) >= 0.5:
            result_class_list.append(pred_class_list[pred.index(pred[i])])
    return result_class_list


# 新建一个dataframe
data = pd.DataFrame({
    'v_id': ["d1", 'd2'],
    'pred_class': ["cat,dog", 'other_label,other_label'],
    'pred': [[0.722817,0.650064], [0.119208,0.215449]],
    'id_part': ["d", '5'],
})

df = data.copy()
df["pos_labels"] = data.apply(lambda row: get_pred_class(row['pred_class'], row['pred']), axis=1)
print(df)

得到结果为:

  id_part                  pred               pred_class v_id  pos_labels
0       d  [0.722817, 0.650064]                  cat,dog   d1  [cat, dog]
1       5  [0.119208, 0.215449]  other_label,other_label   d2          []

PS:如果没有df = data.copy()将会出现错误:

A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-09-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档