为了账号安全,请及时绑定邮箱和手机立即绑定

panda 将多行转换为单行,在 2 个索引上具有多列

panda 将多行转换为单行,在 2 个索引上具有多列

隔江千里 2022-08-31 16:16:41
我正在尝试从以下位置转换熊猫数据帧:ID ID_ver type count price discount1  1      a    4     100   201  1      b    3     50    01  2      a    4     100   301  2      b    3     50    51  2      c    1     70    10自:ID ID_ver count_a price_a discount_a count_b price_b discount_b count_c price_c discount_c我有10种不同的可能类型和数千个ID,每个版本最多有10个版本。我试过了:df.drop_duplicates()df.set_index(['ID','ID_VER','TYPE'])[['count','PRICE','DISCOUNT']].unstack()但得到错误:索引包含重复的条目,无法改变形状。尽管我尝试了很多,但不明白为什么。感谢您的帮助!
查看完整描述

2 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

pandas对索引使用唯一值。您设置了一个三重索引,如果这样做,似乎某些观测值将具有相同的三个值。结果,正在引发错误。pandas


我可以重现您的错误,更改示例的一个值,使其具有相同的索引值:


import pandas as pd


df = pd.read_clipboard()


df.iloc[2, 1] = 1

观测值 0 和 2 现在具有相同的(未来)索引值,这将引发错误。


   ID  ID_ver type  count  price  discount

0   1       1    a      4    100        20 # 1, 1, a

1   1       1    b      3     50         0

2   1       1    a      4    100        30 # 1, 1, a

3   1       2    b      3     50         5

4   1       2    c      1     70        10

df.set_index(['ID','ID_ver','type'])[['count','price','discount']].unstack()

值错误:索引包含重复条目,无法改变形状


查看完整回答
反对 回复 2022-08-31
?
holdtom

TA贡献1805条经验 获得超10个赞

我想你想要这样的东西:

pd.pivot_table(your_df, values=['count', 'price', 'discount'], index=['ID','ID_ver'], columns='type')

如果要从多索引列平展:

your_df.columns = ['_'.join(col).strip() for col in your_df.columns.values]

要平展行多索引:

your_df = your_df.reset_index()

编辑:更改为pivot_table,添加列拼合,行拼合


查看完整回答
反对 回复 2022-08-31
  • 2 回答
  • 0 关注
  • 73 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号