【问题标题】:pandas DataFrame transpose/melt/pivot for one column onlypandas DataFrame 转置/融化/枢轴仅用于一列
【发布时间】:2016-05-25 12:30:08
【问题描述】:

我在 pandas DataFrame 中有这样的数据:

我想把它转换成这个(在 pandas DataFrame 中):

我尝试使用 df.melt()、df.pivot() 和 df.T(),但对我来说没有效果,因为它们转换了所有列......任何人都知道如何解决这个问题(使用 pd Dataframe 以外的其他东西也可以,我的数据在 csv 文件中)?

【问题讨论】:

  • 最好发文字而不是文字图片。
  • 谢谢 John Zwinck,你说得对,下次我会考虑到这一点。

标签: python csv pandas dataframe


【解决方案1】:

我认为您可以将pivotfillna 一起使用:

print (df)
  name group  weight
0    a     e      60
1    t     g      70
2    p     d      80
3    f     d      40
4    e     e      50
5    l     g      30
6    a     d      20

print (df.pivot(index='name', columns='group', values='weight').fillna(''))
group   d   e   g
name             
a      20  60    
e          50    
f      40        
l              30
p      80        
t              70

【讨论】:

  • 非常感谢,这对我有用! :) 我使用 df.pivot_table() 而不是 df.pivot(),因为 df.pivot() 给了我一个重复条目错误。
  • 不幸的是,我发现有些名字在我使用 df.pivot() 后没有出现。所以我丢失了一些数据。 Jezrael 你知道这是怎么造成的吗?
  • 有意思,可以加样吗?
  • Yes :) 我首先打开了长度为 3375 个名称(即 422 个唯一名称)的 csf 文件。然后我使用了 df.pivot,然后我应该有一个 422 行的表,但它有 413.. 有没有一种简单的方法可以知道哪些名称丢失了?
  • 如果不保密,是否可以分享您的数据?
【解决方案2】:

你可以用一行来做到这一点:

df.set_index(['name','group']).unstack()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 2018-02-27
    • 2020-08-14
    • 1970-01-01
    • 2012-09-23
    • 2016-09-06
    相关资源
    最近更新 更多