如何使用 python 熊猫创建一个数据透视表,其中列条目透视到列标题,新列用于空白条目



>我在数据帧中有一个从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
您可以使用

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

您可以将所有None替换为 'unassigned' 。然后使用交叉表获取相应的计数。使用带有正确轴的总和进行总数计数。

以下是执行此操作的代码

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

最新更新