具有多索引和重复字符值的熊猫数据透视表

时间:2020-05-19 11:05:22

标签: python pandas pivot-table multi-index

我正在尝试像这样旋转数据框

id1 id2 property value
1   2   p        v1  
1   2   p        v2

形成

id1 id2 p
1   2   v1 & v2

到目前为止,我的代码是

import pandas as pd
df = pd.DataFrame(data=
    {'id1': [1, 1],
     'id2': [2, 2],
     'property': ['p', 'p'],
     'value': ['v1', 'v2']})
df = df.groupby(["id1", "id2", "property"], as_index=False).agg({'value': ' & '.join})  # 1
print(df)
df = df.pivot_table(index=["id1", "id2"], columns="property", values="value")           # 2
print(df)

输出为

   id1  id2  property  value
0    1    2  p         v1 & v2

pandas.core.base.DataError: No numeric types to aggregate

我不明白该错误消息。有什么要汇总的?在#1之后df是否应采用可旋转的形式?

1 个答案:

答案 0 :(得分:3)

由于默认的聚合函数DataFrame.pivot_table中的aggfunc是平均值,因此会产生错误。将函数更改为join以获得正确的输出:

df = df.pivot_table(index=["id1", "id2"], 
                    columns="property", 
                    values="value",
                    aggfunc=' & '.join)  
print (df)
property        p
id1 id2          
1   2     v1 & v2

最后Multiindex个列添加DataFrame.rename_axis删除列名称和DataFrame.reset_index

df = df.pivot_table(index=["id1", "id2"], 
                    columns="property", 
                    values="value",
                    aggfunc=' & '.join).rename_axis(None, axis=1).reset_index()
print (df)
   id1  id2        p
0    1    2  v1 & v2