次のPython pandasデータフレームがあります。
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()を見ましたが、どれも私にこれを与えてくれないようです。 Pandas newbieなので、すべてのヘルプに感謝します。
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
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)
はより効率的です。
次のようにpandasのトランスポーズAPIを使用できます。
df.transpose()
Dfをpandasデータフレームとして考慮する