2016-05-31 58 views
0

值我有一個數據幀DF,看起來像變換數據框中並計算大熊貓

Date Type 
2010 A 
1998 A 
2003 B 
2003 C 
2007 D 
2010 D 
2015 B 
2015 B 
2006 C 
2006 C 
1998 D 

我需要改造,並計算每個類型每年的發生。所以我的預期成果是:

1998 2003 2006 2007 2010 2015 
A 1 0  0  0 1 0 
B 0 1  0  0 0 2 
C 0 1  2  0 0 0 
D 1 0  0  1 1 0 

我的理解,我需要在這裏使用pivot,對不對? 喜歡的東西df.pivot(index='Type', columns='Data', values=???)

+3

其實我覺得你想要的是[交叉](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.crosstab.html),沒有支點。 – Ajean

+0

看看http://stackoverflow.com/questions/36864929/creating-one-dataframe-from-another-using-pivot(創建一個新的列填充1,然後使用樞軸) – ysearka

回答

4

您可以使用pivot_table並通過len作爲聚合函數:

df.pivot_table(index="Type", columns="Date", aggfunc=len).fillna(0).astype(int) 
Out[152]: 
Date 1998 2003 2006 2007 2010 2015 
Type          
A  1  0  0  0  1  0 
B  0  1  0  0  0  2 
C  0  1  2  0  0  0 
D  1  0  0  1  1  0 

Ajean mentioned,您可以使用交叉表太:

pd.crosstab(df['Type'], df['Date']) 
Out[153]: 
Date 1998 2003 2006 2007 2010 2015 
Type          
A  1  0  0  0  1  0 
B  0  1  0  0  0  2 
C  0  1  2  0  0  0 
D  1  0  0  1  1  0 
2

如果你不希望空值顯示出來,您還可以使用:

df.groupby(['Date', 'Type']).size().reset_index() 

這將使:

Date Type 0 
0 1998 A 1 
1 1998 D 1 
2 2003 B 1 
3 2003 C 1 
4 2006 C 2 
5 2007 D 1 
6 2010 A 1 
7 2010 D 1 
8 2015 B 2