我有一张熊猫桌:
Data Years Y
A 2001 3
A 2007 5
A 2002 8
A 2009 1
B 2001 8
В 2004 5
С 2004 4
С 2006 6
С 2005 9
如何分别分析A,B和C的所有数据?
例如,一个图中每Data
个Year
的直方图?
它应该是带有数据透视表的东西吗?
答案 0 :(得分:3)
您可以尝试pivot
:
print df
Data Years Y
0 A 2001 3
1 A 2007 5
2 A 2002 8
3 A 2009 1
4 B 2001 8
5 B 2004 5
6 C 2004 4
7 C 2006 6
8 C 2005 9
df1 = df.pivot(index='Data', columns='Years', values='Y')
print df1
Years 2001 2002 2004 2005 2006 2007 2009
Data
A 3.0 8.0 NaN NaN NaN 5.0 1.0
B 8.0 NaN 5.0 NaN NaN NaN NaN
C NaN NaN 4.0 9.0 6.0 NaN NaN
如果您不需要计算NaN
值,请使用notnull
,然后按astype
将布尔DataFrame
转换为int
:
print df1.notnull().astype(int)
Years 2001 2002 2004 2005 2006 2007 2009
Data
A 1 1 0 0 0 1 1
B 1 0 1 0 0 0 0
C 0 0 1 1 1 0 0
如果您在Years
列中有重复数据,则可以将pivot_table
与aggfunc
一起使用,例如sum
。我在行2
和3
:
print df
Data Years Y
0 A 2001 3
1 A 2007 5
2 A 2002 8
3 A 2002 10
4 A 2009 1
5 B 2001 8
6 B 2004 5
7 C 2004 4
8 C 2006 6
9 C 2005 9
print df.pivot_table(index='Data', columns='Years', values='Y', aggfunc=sum)
Years 2001 2002 2004 2005 2006 2007 2009
Data
A 3.0 18.0 NaN NaN NaN 5.0 1.0
B 8.0 NaN 5.0 NaN NaN NaN NaN
C NaN NaN 4.0 9.0 6.0 NaN NaN