如何根据条件重新编码列



我有一个要分析的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.wheretop10中查找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

最新更新