【问题标题】:Convert column to row in Python Pandas在 Python Pandas 中将列转换为行
【发布时间】:2017-01-25 21:18:44
【问题描述】:

我有以下 Python 熊猫数据框:

     fruits | numFruits
---------------------
0  | apples |   10
1  | grapes |   20
2  |  figs  |   15

我想要:

                 apples | grapes | figs
-----------------------------------------
Market 1 Order |    10  |   20   |  15

我查看了 pivot()、pivot_table()、Transpose 和 unstack(),但它们似乎都没有给我这个。熊猫新手,感谢所有帮助。

【问题讨论】:

  • 如果您对性能差异感兴趣,请查看question

标签: python pandas dataframe transpose


【解决方案1】:

你需要set_indexT 转置:

print (df.set_index('fruits').T)
fruits     apples  grapes  figs
numFruits      10      20    15

如果需要重命名列,有点复杂:

print (df.rename(columns={'numFruits':'Market 1 Order'})
         .set_index('fruits')
         .rename_axis(None).T)
                apples  grapes  figs
Market 1 Order      10      20    15

另一个更快的解决方案是使用numpy.ndarray.reshape:

print (pd.DataFrame(df.numFruits.values.reshape(1,-1), 
                    index=['Market 1 Order'], 
                    columns=df.fruits.values))

                apples  grapes  figs
Market 1 Order      10      20    15

时间安排

#[30000 rows x 2 columns] 
df = pd.concat([df]*10000).reset_index(drop=True)    
print (df)


In [55]: %timeit (pd.DataFrame([df.numFruits.values], ['Market 1 Order'], df.fruits.values))
1 loop, best of 3: 2.4 s per loop

In [56]: %timeit (pd.DataFrame(df.numFruits.values.reshape(1,-1), index=['Market 1 Order'], columns=df.fruits.values))
The slowest run took 5.64 times longer than the fastest. This could mean that an intermediate result is being cached.
1000 loops, best of 3: 424 µs per loop

In [57]: %timeit (df.rename(columns={'numFruits':'Market 1 Order'}).set_index('fruits').rename_axis(None).T)
100 loops, best of 3: 1.94 ms per loop

【讨论】:

  • 嗨 ...在这个问题中只有 3 列如果我们有 10 列,我们需要保留其中的 8 列并只使用另外 2 列来重塑数据?
  • 看来您需要pivot_table,但没有数据硬答案。也许最好的方法是使用示例数据、所需输出以及您尝试什么(您的代码)创建新问题
  • 我刚刚创建了一个新问题,请查看。
【解决方案2】:
pd.DataFrame([df.numFruits.values], ['Market 1 Order'], df.fruits.values)

                apples  grapes  figs
Market 1 Order      10      20    15

请参阅 jezrael 对这一概念的增强。 df.numFruits.values.reshape(1, -1) 效率更高。

【讨论】:

  • @jezrael 那是我马虎。 pandas 发现我有一个数组列表的开销。像你一样首先给它一个二维数组要简单得多。
  • @jezrael 这个概念是一样的。我将编辑我的答案以指向您的更新。
  • @jezrael 也是,我认为对于较大的阵列来说开销很小......也许
  • 我有点困惑,但我认为现在它是超级的。谢谢。
  • 我创建了一个关于解释的新问题,希望你能得到好的答案;)
【解决方案3】:

你可以使用 pandas 的 transpose api 如下:

df.transpose()

将 df 视为您的 pandas 数据框

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-09
    • 2023-03-26
    • 2021-09-12
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    相关资源
    最近更新 更多