1 回答

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊
這是一種方法:
charlist='ABCDEFG'
dd = {k:' '+v for k, v in enumerate(charlist)}
df['Level'] += df.groupby(['Product', 'Level'])['Cost']\
.transform(lambda x: x.factorize()[0] if x.nunique()>1 else -1)\
.map(dd).fillna('')
輸出:
Product Level Cost
0 Prod_A L1 A 100
1 Prod_A L1 A 100
2 Prod_A L1 B 200
3 Prod_A L2 100
4 Prod_A L3 100
5 Prod_B L1 150
6 Prod_B L1 150
7 Prod_B L2 A 200
8 Prod_B L2 B 300
9 Prod_C L3 100
細(xì)節(jié):
首先,創(chuàng)建要附加的字符的字典。
然后groupby使用transform唯一的“編碼”每個(gè)成本的產(chǎn)品和級(jí)別pd.Series.factorize,如果只有一個(gè)成本金額,則使用 -1。
最后,使用字典映射“編碼”成本的結(jié)果并用空白字符串填充。