所以我有一个数据帧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。我做错什么了吗?
答案 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