web-dev-qa-db-ja.com

Pandas python .describe()フォーマット/出力

.describe()関数を再フォーマットされた方法で出力させようとしています。これがcsvデータです(_testProp.csv_)

_'name','prop'
A,1
A,2
B,  4
A,  3
B,  5
B,  2
_

次のように入力すると:

_from pandas import *

data = read_csv('testProp.csv')

temp = data.groupby('name')['prop'].describe()
temp.to_csv('out.csv')
_

出力は次のとおりです。

_name       
A     count    3.000000
      mean     2.000000
      std      1.000000
      min      1.000000
      25%      1.500000
      50%      2.000000
      75%      2.500000
      max      3.000000
B     count    3.000000
      mean     3.666667
      std      1.527525
      min      2.000000
      25%      3.000000
      50%      4.000000
      75%      4.500000
      max      5.000000
dtype: float64
_

ただし、以下の形式のデータが必要です。 transpose()を試しましたが、describe()の使用を維持し、a .agg([np.mean(), np.max(), etc.... )の代わりにそれを操作したいと思います。

_    count   mean    std min 25% 50% 75% max
A   3   2   1   1   1.5 2   2.5 3
B    3  3.666666667 1.527525232 2   3   4   4.5 5
_
7
Mike

これを行う1つの方法は、最初に .reset_index() を実行し、temp DataFrameのインデックスをリセットしてから、 DataFrame.pivot 必要に応じて。例-

In [24]: df = pd.read_csv(io.StringIO("""name,prop
   ....: A,1
   ....: A,2
   ....: B,  4
   ....: A,  3
   ....: B,  5
   ....: B,  2"""))

In [25]: temp = df.groupby('name')['prop'].describe().reset_index()

In [26]: newdf = temp.pivot(index='name',columns='level_1',values=0)

In [27]: newdf.columns.name = ''   #This is needed so that the name of the columns is not `'level_1'` .

In [28]: newdf
Out[28]:
      25%  50%  75%  count  max      mean  min       std
name
A     1.5    2  2.5      3    3  2.000000    1  1.000000
B     3.0    4  4.5      3    5  3.666667    2  1.527525

次に、このnewdfをcsvに保存できます。

3
Anand S Kumar

pandas v0.22では、スタック解除機能を使用できます。上記の@Kumarの回答に基づいて、pandas stack/unstack機能を使用して再生できます。バリエーションがあります。

from io import StringIO
import pandas as pd
df = pd.read_csv(StringIO("""name,prop
   A,1
   A,2
   B,  4
   A,  3
   B,  5
   B,  2"""))

df.shape
df
temp = df.groupby(['name'])['prop'].describe()
temp
temp.stack() #unstack(),unstack(level=-1) level can be -1, 0

詳細については、ドキュメントを確認してください pandas unstack

1
Vitalis