我有一个如下所示的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().
答案 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