我跟随
但我正面临着一种不同的方式来转动DataFrame。
基本的pivot命令是这样的:
d.pivot(index='Item', columns='CType', values='USD')
现在假设我的'Item'
在两个其他数据列中属于两个类别'Area'
和'Region'
。我希望透视结果包含这三个级别(Region, Area, Item
)。我怎样才能做到这一点?
我一直在寻找各地的答案,并且一直在尝试'unstack', 'droplevel', 'reset_index'
等方法,但却无法让自己发挥作用。
请帮忙。
由于
答案 0 :(得分:1)
首先,您可能想要使用pd.pivot_table
。其次,如果要在维度上包含多个列,则需要将它们作为列表传递(例如index=['Item', 'Area', 'Region']
)。
# Random data.
np.random.seed(0)
df = pd.DataFrame({'Area': ['A', 'A', 'A', 'B', 'B', 'B'],
'Region': ['r', 's', 'r', 's', 'r', 'r'],
'Item': ['car' ,'car', 'car', 'truck', 'bus', 'bus'],
'CType': [3, 4, 3, 3, 5, 5],
'USD': np.random.rand(6) * 100})
>>> df
Area CType Item Region USD
0 A 3 car r 54.881350
1 A 4 car s 71.518937
2 A 3 car r 60.276338
3 B 3 truck s 54.488318
4 B 5 bus r 42.365480
5 B 5 bus r 64.589411
>>> pd.pivot_table(df,
index=['Item', 'Area', 'Region'],
columns='CType',
values='USD',
aggfunc=sum)
CType 3 4 5
Item Area Region
bus B r NaN NaN 106.954891
car A r 115.157688 NaN NaN
s NaN 71.518937 NaN
truck B s 54.488318 NaN NaN