繁体   English   中英

根据列中的重复值重塑 Pandas dataframe

[英]Reshaping Pandas dataframe based on repeating values in a column

Pandas 非常新,可能在某个地方得到了回答,但我似乎无法找到我正在寻找的确切内容。 假设我的数据集具有这种类型的结构

Animal |  Age  |  Color  | Length

Cat       1       Brown       50cm
Cat       2       White       60cm
Cat       3       Brown       55cm
Dog       1       White       99cm
Dog       2       White       129cm
Dog       3       White       105cm

我怎样才能最容易地将其转换为这种格式,其中现有的列是水平附加的,而不是为特定动物垂直排列的

Animal |  Age_1  |  Color_1  | Length_1 |  Age_2 | Color_2 | Length_2 | Age_3 | Color_3 | Length_3

Cat       1        Brown       50cm         2       White      60cm       3       Brown      55cm
Dog       1        White       99cm         2       White      129cm      3       White      105cm

也许不是最好使用的示例标签,但希望能得到重点,我也非常感谢答案的链接。

通过GroupBy.cumcountDataFrame.set_index创建MultiIndex ,然后通过DataFrame.unstack和 sortinf 列中的第二级MultiIndex进行整形,然后用f-string将其展平并将索引转换为列:

df1 = (df.set_index(['Animal', df.groupby('Animal').cumcount().add(1)])
         .unstack()
         .sort_index(axis=1, level=1))
df1.columns = [f'{a}_{b}' for a, b in df1.columns]
df1 = df1.reset_index()
print (df1)
  Animal  Age_1 Color_1 Length_1  Age_2 Color_2 Length_2  Age_3 Color_3  \
0    Cat      1   Brown     50cm      2   White     60cm      3   Brown   
1    Dog      1   White     99cm      2   White    129cm      3   White   

  Length_3  
0     55cm  
1    105cm  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM