我有以下数据框:
week Country Year Value category
1 Angola 2005 6 A
1 Angola 2005 13 A
1 Angola 2005 10 B
1 Angola 2005 11 C
1 Angola 2005 5 D
1 Angola 2006 3 A
1 Angola 2006 2 B
1 Angola 2006 7 C
1 Angola 2006 3 D
1 Angola 2006 6 E
2 Angola 2006 3 A
2 Angola 2006 2 B
2 Angola 2006 7 C
2 Angola 2006 3 D
我希望上面的数据框在每年按周分组,并在python中准备一个透视图,给出下面的数据框。对于不同的国家,相同的数据会继续存在,并且可能会添加不同的类别,如果任何国家/地区都有新类别,则应将该类别添加到数据框中,并在该数据框中包含相应的值。
week Country year category_A Category_B category_C category_D Category_E
1 Angola 2005 19 10 11 5 0
1 Angola 2006 3 2 7 3 6
2 Angola 2006 3 2 7 3 0
答案 0 :(得分:3)
这是一种方式。请注意,如果您需要索引作为列,则可以使用reset_index
。您可能还希望将类别列重命名为单独的步骤。
res = df.pivot_table(index=['week', 'Country', 'Year'], columns=['category'],
values='Value', aggfunc=np.sum, fill_value=0)
print(res)
category A B C D E
week Country Year
1 Angola 2005 19 10 11 5 0
2006 3 2 7 3 6
2 Angola 2006 3 2 7 3 0
答案 1 :(得分:2)
在这种情况下,您还可以使用groupby
代替pivot
:
(df.groupby(['week', 'Year', 'Country', 'category'])
.sum()
.unstack(fill_value=0)
.add_prefix('category_'))
这给了你:
category_Value
category category_A category_B category_C category_D category_E
week Year Country
1 2005 Angola 19 10 11 5 0
2006 Angola 3 2 7 3 6
2 2006 Angola 3 2 7 3 0