python-如何使用枢纽表列列标题和空白列的新列创建python pandas的数据透视表?

时间:2019-01-25 08:00:02

标签: python pandas

我在DataFrame中有一张表是从Excel摘录的:

col A      ColB  colC  colD   
123451      a     w     p
123452      b     x     q
123453      c     y     r
123454      a     x     
123454      a     w     p 

我想要使用pandas.pivot_table这样的东西:

colC   p  q  r  "unassigned" "total"
 w     2  0  0      0           2
 x     0  1  0      1           2
 y     0  0  1      0           1

2 个答案:

答案 0 :(得分:2)

您可以在第一列中使用crosstab,然后使用isna检查缺失值,并按agg进行汇总,以sum进行计数,并按size进行总计, DataFrame.join的最后加入聚会:

df1 = pd.crosstab(df.colC, df.colD)
print (df1)
colD  p  q  r
colC         
w     2  0  0
x     0  1  0
y     0  0  1

df2 = (df['colD'].isna()
                 .astype(int)
                 .groupby(df['colC'])
                 .agg([('unassigned','sum'),('total','size')]))
print (df2)
      unassigned  total
colC                   
w              0      2
x              1      2
y              0      1

df = df1.join(df2).reset_index()
print (df)
  colC  p  q  r  unassigned  total
0    w  2  0  0           0      2
1    x  0  1  0           1      2
2    y  0  0  1           0      1

答案 1 :(得分:1)

您可以将所有None替换为'unassigned'。然后使用crosstab获得各自的计数。将sum用于正确的总计数。

以下是执行此操作的代码

df1 = df[['colC', 'colD']].fillna('unassigned')
df1 = pd.crosstab(df1.colD, df1.colD)
df1['total'] = df1.sum(axis=1)

以下是代码的输出

D   p   q   r   unassigned  total
C                   
w   2   0   0    0           2
x   0   1   0    1           2
y   0   0   1    0           1