我有一个要分析的bigdata,其中包括许多带列的行。
我想在只显示前10个品牌和'Others'
的条件下,复制'Brand'
列,创建一个新的列('Recode_Brand')
那么我该如何建立条件和逻辑呢?
如果我能使用以下条件,那将是完美的;
Brand_list = ['Google', 'Apple', 'Amazon', 'Microsoft', 'Tencent', 'Facebook', 'Visa', 'McDonald's', 'Alibaba', 'AT&T']
我对熊猫很陌生,需要你们的支持。提前高度赞赏。
在此处输入图像描述
只需使用2018
列,例如:
df['Recode_Brand'] = df.apply(lambda row: row['Brand'] if row['2018'] <= 10 else 'Other', axis=1)
或者,如果你需要这个品牌列表,你可以做:
Brand_list = ["Google", "Apple", "Amazon", "Microsoft", "Tencent", "Facebook", "Visa", "McDonald's", "Alibaba", "AT&T"]
df['Recode_Brand'] = df.apply(lambda row: row['Brand'] if row['Brand'] in Brand_list else 'Other', axis=1)
NB如果字符串包含'
字符(如McDonald's
中的字符(,则必须将其用双引号"
括起来,或者用'
转义该字符。
使用numpy.where
在top10
中查找Brand
并添加新列:
df = pd.DataFrame({'2018':[7,8,3,12,15,16,10,9,4,5,11,1,14,2,13,6],
'Brand':['Google','Apple','Amazon','Microsoft','Tencent','Facebook','Visa','McDonalds','Alibaba','AT&T',
'IBM','Verizon','Marlboro','Coca-Cola','MasterCard','UPS']})
创建一个新的系列与前10名品牌
top10 = df.nsmallest(10, '2018')
如果品牌在top10
,则添加一个新列Recode_Brand
,否则为'Others'
df['Recode_Brand'] = np.where((df['Brand'].eq(top10['Brand'])),df['Brand'],'Others')
print(df)
2018 Brand Recode_Brand
0 7 Google Google
1 8 Apple Apple
2 3 Amazon Amazon
3 12 Microsoft Others
4 15 Tencent Others
5 16 Facebook Others
6 10 Visa Visa
7 9 McDonalds McDonalds
8 4 Alibaba Alibaba
9 5 AT&T AT&T
10 11 IBM Others
11 1 Verizon Verizon
12 14 Marlboro Others
13 2 Coca-Cola Coca-Cola
14 13 MasterCard Others
15 6 UPS UPS