根据其他列的值分配一个新值

时间:2019-11-29 23:13:30

标签: python

所以我有一个数据帧Fruit,其结构如下所示

Fruit Sales
Apple 1000
Pear  2000
Peach  400
Banana 200
...

我想创建一个新列“标签”,为销售额低于10级(按销售额降序排序)的水果分配值“其他”,对于10级(包括)以上的水果,将其水果名称分配给“标签”。因此,假设Peach和Banana的销售排名低于10,就应该像这样。

Fruit Sales  Tag
Apple 1000   Apple
Pear  2000   Pear
Peach  400   Others
Banana 200   Others
...

首先,我首先按销量对Fruit数据框进行排序,并获取前10条记录:

Top_fruit = Fruit.sort_values(by='Sales',ascending = False)[:10]

第二,我创建一个Fruit_test数据框,添加“标签”字段以处理loc函数,以查找不在排名前10位的水果(即Top_fruit)并将“其他”分配给标签字段。

Fruit_test = Fruit.copy()
Fruit_test['Tag'] =Fruit['Fruit']
Fruit_test.loc[~Fruit_test['Fruit'].isin((Top_fruit)),'Tag'] = 'Others'

但是,我不断收到Keyerror:Fruit。我做错什么了吗?

1 个答案:

答案 0 :(得分:0)

您只需一行代码即可完成

df['Tag'] = df.apply(lambda row: row['Fruit'] if row['Sales'] > 10 else 'Other', axis=1)

测试:

import pandas as pd


df = pd.DataFrame(
    [['Apple', 1000], ['Pear', 2000], ['Peach', 8], ['Banana', 5]],
    columns=['Fruit', 'Sales'])

print(df, '\n\n------------\n')

df['Tag'] = df.apply(
    lambda row: row['Fruit'] if row['Sales'] > 10 else 'Other', axis=1)

print(df)

输出:

    Fruit  Sales
0   Apple   1000
1    Pear   2000
2   Peach      8
3  Banana      5 

------------

    Fruit  Sales    Tag
0   Apple   1000  Apple
1    Pear   2000   Pear
2   Peach      8  Other
3  Banana      5  Other