大家好, 我是超级新人,所以我正在寻求帮助。 请考虑以下数据框:
fruit sales price
0 lemon .. ..
1 orange .. ..
2 carrot .. ..
3 potato .. ..
4 pineapple .. ..
5 mango .. ..
可以说水果栏可以按以下方式分类: 柠檬+橙=柑橘; 胡萝卜+土豆=块茎; 菠萝+芒果=热带。
之后我想用这个新的 分组作为数据透视表的索引。 ,为了看到平均水平 价格或销售的“柑橘/块茎/热带”细分。
在数据框架中,我试图应用这个逻辑,因为有太多的值来制作一个ditionary。
非常感谢任何帮助:)
答案 0 :(得分:0)
您可以为map
创建dict
并使用groupby
汇总mean
:
#sample data
df = pd.DataFrame({
'price': [4, 7, 3, 4, 1, 4],
'sales': [1, 5, 1, 2, 6, 3],
'model': ['lemon', 'orange', 'carrot', 'potato', 'pineapple', 'mango']})
print (df)
model price sales
0 lemon 4 1
1 orange 7 5
2 carrot 3 1
3 potato 4 2
4 pineapple 1 6
5 mango 4 3
#dict of mapping
d1 = {'citrus': ['lemon', 'orange'],
'tuber':['carrot', 'potato'],
'tropical':['pineapple', 'mango']}
#is necessary swap values with keys and expand them to new dict
d = {k: oldk for oldk, oldv in d1.items() for k in oldv}
print (d)
{'pineapple': 'tropical', 'potato': 'tuber', 'mango': 'tropical',
'lemon': 'citrus', 'orange': 'citrus', 'carrot': 'tuber'}
s = df['model'].map(d)
df1 = df.groupby(s)['sales'].mean().reset_index()
print (df1)
model sales
0 citrus 3.0
1 tropical 4.5
2 tuber 1.5
使用set_index
的类似解决方案,但是必须更改列名:
df1 = df.set_index('model').groupby(d)['sales'].mean().reset_index()
df1.columns= ['model','sales']
print (df1)
model sales
0 citrus 3.0
1 tropical 4.5
2 tuber 1.5