猿问

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

我正在尝试从以下位置转换熊猫数据帧:


ID ID_ver type count price discount

1  1      a    4     100   20

1  1      b    3     50    0

1  2      a    4     100   30

1  2      b    3     50    5

1  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()

但得到错误:


索引包含重复的条目,无法改变形状。


尽管我尝试了很多,但不明白为什么。


感谢您的帮助!


隔江千里
浏览 74回答 2
2回答

猛跑小猪

pandas对索引使用唯一值。您设置了一个三重索引,如果这样做,似乎某些观测值将具有相同的三个值。结果,正在引发错误。pandas我可以重现您的错误,更改示例的一个值,使其具有相同的索引值:import pandas as pddf = pd.read_clipboard()df.iloc[2, 1] = 1观测值 0 和 2 现在具有相同的(未来)索引值,这将引发错误。   ID  ID_ver type  count  price  discount0   1       1    a      4    100        20 # 1, 1, a1   1       1    b      3     50         02   1       1    a      4    100        30 # 1, 1, a3   1       2    b      3     50         54   1       2    c      1     70        10df.set_index(['ID','ID_ver','type'])[['count','price','discount']].unstack()值错误:索引包含重复条目,无法改变形状

holdtom

我想你想要这样的东西: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,添加列拼合,行拼合
随时随地看视频慕课网APP

相关分类

Python
我要回答