为了账号安全,请及时绑定邮箱和手机立即绑定

如何执行多个数学运算来派生新列?

如何执行多个数学运算来派生新列?

梵蒂冈之花 2021-06-18 18:01:54
我有一个 df 看起来像这样:consumer_id      order_total1                    52                    63                    71                    5对于每一个消费者consumer_id我想取平均值所有的order_total每consumer_id创造一个新的列SID基于以下规则:if new `order_total` >= 7:      SID = 3elif new `order_total` >= 6 OR <7:      SID = 2else:      SID = 1新 df 应如下所示(consumer_id1,平均值为 5):consumer_id      order_total   SID1                    5          12                    6          23                    7          31                    5          1这是我在没有平均 per 的情况下尝试的 if 语句consumer_id:if df.order_total >= 150:    df['SID'] = 3elif [df.order >= 50] & [df.order< 100]:    df['SID'] = 2else:    df['SID'] = 1我得到错误:ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
查看完整描述

3 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

尝试apply:


def f(x):

    if x >= 7:

        SID = 3

    elif x >= 6 and x<7:

        SID = 2

    else:

        SID = 1

    return SID


df['SID']=df['order_total'].apply(f)


查看完整回答
反对 回复 2021-06-22
?
忽然笑

TA贡献1806条经验 获得超5个赞

使用 groupby 和 transform 来获取包含每个 consumer_id 的平均订单总数的系列,然后将函数应用于该系列以创建结果系列。


def sid_assign(x):

    if x >= 7:

        return 3

    if x >= 6 | x < 7:

        return 2

    else:

        return 1


id_sums = df.groupby('consumer_id').order_total.transform('mean')

df['SID'] = id_sums.apply(sid_assign)


print(df)


   consumer_id  order_total  SID

0            1            5    1

1            2            6    2

2            3            7    3

3            1            5    1


查看完整回答
反对 回复 2021-06-22
  • 3 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号