Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中将列转换为行_Python_Pandas_Dataframe_Transpose - Fatal编程技术网

在Python中将列转换为行

在Python中将列转换为行,python,pandas,dataframe,transpose,Python,Pandas,Dataframe,Transpose,我有以下Python数据帧: fruits | numFruits --------------------- 0 | apples | 10 1 | grapes | 20 2 | figs | 15 我想: apples | grapes | figs ----------------------------------------- Market 1 Order | 10 | 20 | 15 我已经研究

我有以下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(),但它们似乎都没有给出这一点。熊猫新手,非常感谢您的帮助。

您需要通过以下方式进行转置:

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

print (df.rename(columns={'numFruits':'Market 1 Order'})
         .set_index('fruits')
         .rename_axis(None).T)
                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


请参阅耶斯雷尔对这一概念的强化
df.numFruits.values.reformate(1,-1)
更有效。

您可以使用熊猫转置api,如下所示:

df.transpose()

考虑到df是你的熊猫数据框

@jezrael,我太马虎了。计算出我有一个数组列表的开销。一开始就给它2-D数组比你给它的简单多了。@jezrael这个概念是一样的。我将编辑我的答案以指向您对它的更新。@jezrael另外,我认为对于较大的阵列来说,开销很小。。。也许贝有点困惑,但我认为现在它是超级的。谢谢。我提出了一个关于解释的新问题,希望你们能得到好的答案;)如果您对性能的差异感兴趣,请勾选此Hi…在这个问题中,只有3列,如果我们有10列,我们需要保留其中8列,然后使用其他2列来重塑数据,该怎么办?似乎您需要,但没有数据硬回答。也许最好的办法是用样本数据、期望的输出和你的尝试(你的代码)创建一个新问题。我刚刚创建了一个新问题,请审阅。
#[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
pd.DataFrame([df.numFruits.values], ['Market 1 Order'], df.fruits.values)

                apples  grapes  figs
Market 1 Order      10      20    15
df.transpose()