我有一个数据框,其中包含一列包含多种食品的列。我想用食品类型创建一个新列,该列存储在多个列表中。
这是我的列表:
fruits = ['apples', 'oranges', 'bananas']
veggies = ['carrots', 'lettuce', 'onions']
meats = ['steak', 'chicken', 'fish']
我有一个包含所有这些食物的列,但不想创建一个包含食物类型的列。
我有一个笨拙的解决方案,但是我想知道是否有一种更简单的方法来遍历这些列表并将食物类型附加到新列中。
这是我当前的解决方案:
df['food_type'] = np.where(df['foods'].isin(fruits),'fruits',
(np.where(df['foods'].isin(veggies),'veggies',
(np.where(df['foods'].isin(meats),'meats','other')))))
创建包含列表的字典并对其进行遍历会更好吗?即
food_types ={'fruits':['apples','oranges','bananas'],'veggies':['carrots', 'lettuce', 'onions'],'meats': ['steak', 'chicken', 'fish']}
答案 0 :(得分:0)
我只是按照您在OP中的建议,将您的数据放入字典中:
import pandas as pd
fruits = ['apples', 'oranges', 'bananas']
veggies = ['carrots', 'lettuce', 'onions']
meats = ['steak', 'chicken', 'fish']
data = {'fruits': fruits, 'veggies': veggies, 'meats': meats}
df = pd.DataFrame(data)
收益:
fruits veggies meats
0 apples carrots steak
1 oranges lettuce chicken
2 bananas onions fish
根据您的评论,如果列表的长度不同,这将不起作用。使用原始数据帧格式,可以对apply()
执行以下操作:
df = pd.DataFrame(fruits + veggies + meats, columns=['foods'])
def find_category(x):
return [k for k, v in data.items() if x in v][0]
df['food_type'] = df['foods'].apply(find_category)
收益:
foods food_type
0 apples fruits
1 oranges fruits
2 bananas fruits
3 carrots veggies
4 lettuce veggies
5 onions veggies
6 steak meats
7 chicken meats
8 fish meats