【发布时间】:2016-12-21 10:31:07
【问题描述】:
我有以下数据框(实际数据框比这个大得多):
sale_user_id sale_product_id count
1 1 1
1 8 1
1 52 1
1 312 5
1 315 1
然后使用以下代码对其进行整形以将 sale_product_id 中的值移动为列标题:
reshaped_df=id_product_count.pivot(index='sale_user_id',columns='sale_product_id',values='count')
得到的数据框是:
sale_product_id -1057 1 2 3 4 5 6 8 9 10 ... 98 980 981 982 983 984 985 986 987 99
sale_user_id
1 NaN 1.0 NaN NaN NaN NaN NaN 1.0 NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN 1.0 NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
如您所见,我们有一个多级索引,我需要的是在第一列中包含 sale_user_is 而没有多级索引:
我采取以下方法:
reshaped_df.reset_index()
结果会是这样,我仍然有 sale_product_id 列,但我不再需要它了:
sale_product_id sale_user_id -1057 1 2 3 4 5 6 8 9 ... 98 980 981 982 983 984 985 986 987 99
0 1 NaN 1.0 NaN NaN NaN NaN NaN 1.0 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 3 NaN 1.0 NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 4 NaN NaN 1.0 NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
我可以对这个数据框进行子集化以摆脱sale_product_id,但我认为它不会有效。我正在寻找一种有效的方法来摆脱多级索引,同时重塑原始数据框
【问题讨论】:
-
截至 2020 年,解决方案可能是使用
reshaped_df.droplevel(1, axis=0)(documentation),但我不确定我是否完全理解所选答案解决的问题。
标签: python pandas dataframe pivot-table data-analysis