Pandas 熊猫:如何用一组有序值对数据帧进行分组?

Pandas 熊猫:如何用一组有序值对数据帧进行分组?,pandas,matplotlib,group-by,Pandas,Matplotlib,Group By,我开始学习Python Pandas,并希望生成一个包含任意有序值分组之和的图。用一个简单的例子可以更好地解释这一点 假设我有下表的食品消费数据: 我有两组食物被定义为两个列表: healthy = ['apple', 'brocolli'] junk = ['cheetos', 'coke'] 现在我想画一张图表,展示垃圾食品和健康食品消费的演变。我相信我必须处理我的数据,以获得如下数据帧: 假设第一个表已经在一个名为food的数据框中,如何将其转换为第二个表 我也欢迎有人建议改写我的问

我开始学习Python Pandas,并希望生成一个包含任意有序值分组之和的图。用一个简单的例子可以更好地解释这一点

假设我有下表的食品消费数据:

我有两组食物被定义为两个列表:

healthy = ['apple', 'brocolli']
junk = ['cheetos', 'coke']
现在我想画一张图表,展示垃圾食品和健康食品消费的演变。我相信我必须处理我的数据,以获得如下数据帧:

假设第一个表已经在一个名为
food
的数据框中,如何将其转换为第二个表


我也欢迎有人建议改写我的问题,使其更清楚,或采用不同的方法生成情节

首先用列表创建
词汇表
,然后用
值交换

然后通过映射列<代码>食品<代码>通过<代码>目录<代码>和<代码>年份<代码>,聚合<代码>总和<代码>,最后通过以下方式重塑:

另一个解决方案包括:


请不要发布数据的图像,因为在这些图像中,这意味着任何人想要用您的数据显示一个工作过的示例,都必须手动键入。@DSM:lesson learned。谢谢今晚要早点睡觉。。。玩得开心:-)是啊,昨天太疯狂了;)晚安;)谢谢,我喜欢透视表。以下是一个很好的理解指南:
healthy = ['apple', 'brocolli']
junk = ['cheetos', 'coke']

d1 = {'healthy':healthy, 'junk':junk}
##http://stackoverflow.com/a/31674731/2901002
d = {k: oldk for oldk, oldv in d1.items() for k in oldv}
print (d)
{'brocolli': 'healthy', 'cheetos': 'junk', 'apple': 'healthy', 'coke': 'junk'}

df1 = df.groupby([df.food.map(d), 'year'])['amount'].sum().unstack(0)
print (df1)
food  healthy  junk
year               
2010       10    11
2011       17    10
2012       13    24
df1 = df.pivot_table(index='year', columns=df.food.map(d), values='amount', aggfunc='sum')
print (df1)
food  healthy  junk
year               
2010       10    11
2011       17    10
2012       13    24