枢轴/ Groupby数据框,其中索引列中有重复项,包含非数字数据

时间:2019-06-21 12:14:49

标签: python pandas pivot pivot-table

假设我有以下示例数据框:

df1 = pd.DataFrame({'col1': ['A', 'A', 'B', 'A'], 'col2': ['CA', 'DA', 'CA', 'CA'], 'col3': [1, 1, 1, 2]})


Out[25]:

  col1 col2 col3
0  A    CA   1 
1  A    DA   1 
2  B    CA   1 
3  A    CA   2 

我想按“ col3”作为索引,将“ col1”作为新列(在这种情况下,列为“ A”或“ B”)将该表分组,并且值应为“ col2”。

我尝试过使用pivot_table(也使用pivot):

pd.pivot_table(df1,index='col3', columns="col1", values=['col2'])

在这种情况下,错误是:No numeric types to aggregate在使用pivot命令的情况下,错误是:multiple indexes。这两种情况对我来说都是合理的。但是有什么选择吗?当我在一个列中有两个值时,我倾向于以下结果:

  A                B
1 ['CA', 'DA']     CA
2  'CA'            NaN

1 个答案:

答案 0 :(得分:2)

对于输出中所有缺少值的列表,请添加自定义lambda函数:

df1 = pd.pivot_table(df1,index='col3', columns="col1", values='col2',
                     aggfunc = lambda x: x.tolist())
print (df1)
col1         A     B
col3                
1     [CA, DA]  [CA]
2         [CA]   NaN

如果需要标量而不是一个元素列表,请添加if-else语句:

df1 = pd.pivot_table(df1,index='col3', columns="col1", values='col2', 
                     aggfunc = lambda x: x.tolist() if len(x) > 1 else x.iat[0])
print (df1)
col1         A    B
col3               
1     [CA, DA]   CA
2           CA  NaN