【问题标题】:Transform dataframe and count values in pandas在熊猫中转换数据框和计数值
【发布时间】:2016-05-31 23:57:27
【问题描述】:

我有一个看起来像的数据框 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=???)

【问题讨论】:

标签: python pandas pivot


【解决方案1】:

您可以使用 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
    

    【讨论】:

      猜你喜欢
      • 2021-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 2021-04-03
      • 2018-07-12
      • 2018-09-29
      相关资源
      最近更新 更多