【问题标题】:Pivot - Transpose columns by duplicates pandas dataframePivot - 通过重复的熊猫数据框转置列
【发布时间】:2020-02-27 10:30:33
【问题描述】:

我有一个 DataFrame,其中包含一个名为“ID”的列,其中包含重复的观察结果。每个“ID”行都有一个或多个“文章”值列。我想通过“ID”转置整个数据帧分组,在唯一“ID”的同一行添加新列。

我有什么:

ID  Article_1   Article_2
1   Banana      Coconut
2   Apple       Strawberry
1   Apple   
3   Tomatoe 
1   Pineapple   
2   Banana  
4   Apple   
5   Apple       Strawberry
3   Apple   

我想要什么:

ID     Article_1    Article_2   Article_3   Article_4
0001    Banana      Coconut     Apple       Pineapple
0002    Apple       Strawberry  Banana      NaN
0003    Tomatoe     Apple       NaN         NaN
0004    Apple       NaN         NaN         NaN
0005    Apple       Strawberry  NaN         NaN

新编辑:

我遇到过一些顺序很重要的情况。

我的 DF:

ID  Article     Article_2
1   Banana      NaN
2   Apple       NaN
1   Apple       Coconut
3   Tomatoe     Coconut
1   Pineapple   Tropical
2   Banana      Coconut
4   Apple       Coconut
5   Apple       Coconut
3   Apple       Pineapple

第一个@Erfan 解决方案的输出:

        Article_1   Article_2   Article_3   Article_4   Article_5   Article_6
0001    Banana      Apple       Pineapple   NaN         Coconut     Tropical
0002    Apple       Banana      NaN         Coconut     NaN         NaN
0003    Tomatoe     Apple       Coconut     Pineapple   NaN         NaN
0004    Apple       Coconut     NaN         NaN         NaN         NaN
0005    Apple       Coconut     NaN         NaN         NaN         NaN

我需要什么:

        Article_1   Article_2   Article_3   Article_4   Article_5   Article_6
0001    Banana      Apple       Pineapple   Coconut     Tropical    NaN     
0002    Apple       Banana      Coconut     NaN         NaN         NaN
0003    Tomatoe     Apple       Coconut     Pineapple   NaN         NaN
0004    Apple       Coconut     NaN         NaN         NaN         NaN
0005    Apple       Coconut     NaN         NaN         NaN         NaN

我不能让带有 NaN 值的 Article_5 和带有值的 Article_6 在同一行。

【问题讨论】:

  • 请从您的示例数据集中导出您的预期输出,Coconutstrawberry 来自哪里?
  • stackoverflow.com/questions/29070423/…df.pivot(index='ID', columns='Article', values='Article')
  • 订单对您来说重要吗?因此,例如带有ID 0001 的行,Coconut 在第二列是否重要
  • 顺序并不重要,但不能是'Article_2'中的NaN值和'Article_3'中的值。

标签: python pandas dataframe pivot transpose


【解决方案1】:

如果文章的顺序不重要,我们可以使用DataFrame.melt 将您的文章取消透视到行。

然后我们使用DataFrame.pivot_table 聚合到每个ID。虽然我们使用GroupBy.cumcountID 中的每个article 提供唯一标识符:

dfn = df.melt(id_vars='ID', value_vars=['Article_1', 'Article_2'])
dfn = dfn.pivot_table(index='ID', 
                      columns=dfn.groupby('ID')['value'].cumcount().add(1),
                      values='value',
                      aggfunc='first').add_prefix('Article_').rename_axis(None, axis='index')

     Article_1   Article_2   Article_3 Article_4
0001    Banana       Apple   Pineapple   Coconut
0002     Apple      Banana  Strawberry       NaN
0003   Tomatoe       Apple         NaN       NaN
0004     Apple         NaN         NaN       NaN
0005     Apple  Strawberry         NaN       NaN

【讨论】:

  • 我遇到过一些顺序很重要的情况。
猜你喜欢
  • 1970-01-01
  • 2012-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-16
  • 2021-11-05
  • 1970-01-01
  • 2020-07-07
相关资源
最近更新 更多