如何执行多个数学运算以导出新列?

时间:2018-09-21 01:03:30

标签: python pandas

我有一个如下所示的df:

consumer_id      order_total
1                    5
2                    6
3                    7
1                    5

对于每个消费者consumer_id,我想取每个order_total的所有consumer_id的平均值,并根据以下规则创建新列SID

if new `order_total` >= 7:
      SID = 3
elif new `order_total` >= 6 OR <7:
      SID = 2
else:
      SID = 1

新df应该如下所示(consumer_id 1,平均值为5):

consumer_id      order_total   SID
1                    5          1
2                    6          2
3                    7          3
1                    5          1

这是我尝试的if语句,没有每个consumer_id的平均值:

if df.order_total >= 150:
    df['SID'] = 3
elif [df.order >= 50] & [df.order< 100]:
    df['SID'] = 2
else:
    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 个答案:

答案 0 :(得分:2)

不要使用ngOnChanges,请使用apply

np.select

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

c1 = s.ge(7)
c2 = s.ge(6) & s.lt(7)

df.assign(SID=np.select([c1, c2], [3, 2], 1))

答案 1 :(得分:1)

尝试#define LOWORD(l) ((WORD)(((DWORD_PTR)(l)) & 0xffff)) #define HIWORD(l) ((WORD)((((DWORD_PTR)(l)) >> 16) & 0xffff))

/BOBF/BADI_DAC_WRITE

答案 2 :(得分:0)

结合使用groupby和transform来获得包含平均顺序的序列 每个consumer_id的总数,然后对系列应用一个函数以创建结果系列。

title*author*pubdate*isbn
title*author*pubdate*isbn
title*author*pubdate*isb