我有以下数据框(真实数据框比这个大得多):
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
,但我认为这样并不高效。我正在寻找一种有效的方法,在重塑原始数据框时摆脱多级索引。
reshaped_df.droplevel(1, axis=0)
(文档),但我不确定我完全理解所选答案解决的问题。 - mins