Pandas,按多个分层列旋转 DataFrame
Pandas, Pivoting DataFrame By Multiple Hierarchical Columns
我正在关注
但我面临着一个不同的旋转 DataFrame 的场景。
基本的枢轴命令是这样的:
d.pivot(index='Item', columns='CType', values='USD')
现在假设我的 'Item'
在另外两个数据列中属于两个类别 'Area'
和 'Region'
。我希望旋转结果包含这三个级别 (Region, Area, Item
)。我怎样才能做到这一点?
我一直在到处寻找答案,也一直在尝试 'unstack', 'droplevel', 'reset_index'
等方法,但无法让它们自己工作。
请帮忙。
谢谢
首先,您可能想使用 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
我正在关注
但我面临着一个不同的旋转 DataFrame 的场景。
基本的枢轴命令是这样的:
d.pivot(index='Item', columns='CType', values='USD')
现在假设我的 'Item'
在另外两个数据列中属于两个类别 'Area'
和 'Region'
。我希望旋转结果包含这三个级别 (Region, Area, Item
)。我怎样才能做到这一点?
我一直在到处寻找答案,也一直在尝试 'unstack', 'droplevel', 'reset_index'
等方法,但无法让它们自己工作。
请帮忙。
谢谢
首先,您可能想使用 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