あなたがリシェイプためpivot
またはset_index
+ unstack
を使用する必要があります。
df1 = df.pivot(index='Name', columns='Date', values='Height')
print (df1)
Date 1 2 3
Name
a 12 14 15
b 10 11 12
c 11 13 14
df1 = df.set_index(['Name', 'Date'])['Height'].unstack(fill_value=0)
print (df1)
Date 1 2 3
Name
a 12 14 15
b 10 11 12
c 11 13 14
しかし、取得した場合:
ValueError: Index contains duplicate entries, cannot reshape
が列の重複が新しいインデックスと列を作成します:得れば
:しかし
df = pd.DataFrame({
"Name": ["b", "b", "a", "b", "a", "c","a", "b", "c"],
"Date": ["1", "1", "1", "2", "2", "2","3", "3", "3"],
"Height": ["10", "11", "12", "11", "14", "13","15", "12", "14"]
})
print (df)
Date Height Name
0 1 10 b <-duplicate Date=1, Name=b
1 1 11 b <-duplicate Date=1, Name=b
2 1 12 a
3 2 11 b
4 2 14 a
5 2 13 c
6 3 15 a
7 3 12 b
8 3 14 c
その後mean
のようないくつかの集約関数とpivot_table
、sum
を必要とするか、groupby
+ aggregate function
+ unstack
を使用
DataError: No numeric types to aggregate
集計の列番号Height
はnumではありませんエリック、そうint
またはfloat
にキャストするためにastype
を使用します。列の場合
df['Height'] = df['Height'].astype(int)
df1 = df.pivot_table(index='Name',
columns='Date',
values='Height',
aggfunc='mean', fill_value=0)
print (df1)
Date 1 2 3
Name
a 12.0 14 15
b 10.5 11 12
c 0.0 13 14
df1 = df.groupby(['Name', 'Date'])['Height'].mean().unstack(fill_value=0)
print (df1)
Date 1 2 3
Name
a 12.0 14.0 15.0
b 10.5 11.0 12.0
c 0.0 13.0 14.0
はreset_index
+ rename_axis
を追加します。
df1 = df1.reset_index().rename_axis(None, axis=1)
print (df1)
Name 1 2 3
0 a 12.0 14.0 15.0
1 b 10.5 11.0 12.0
2 c 0.0 13.0 14.0
はStackOverflowのへようこそ。この記事を読むには、[素晴らしいパンダの例を提供する方法](http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples)と[最小限の、完全で検証可能な例を提供する](http:// stackoverflow。com/help/mcve)を編集し、それに応じて質問を修正してください。良い質問をする方法(http://stackoverflow.com/help/how-to-ask)も役立つかもしれません。 – jezrael
が編集されました。チェックしてください。 –