Pandas pivot_table,具有多索引和重复字符值。

问题描述 投票:0回答:1

我正试图对一个数据框进行数据透视,如

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

我看不懂这个错误信息。有什么需要汇总的?df应该是#1之后的pivotable形式?

python pandas pivot-table multi-index
1个回答
3
投票

因为默认的聚合函数。aggfuncDataFrame.pivot_table 为平均值,误差为rased。将功能改为 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
© www.soinside.com 2019 - 2024. All rights reserved.