我正试图对一个数据框进行数据透视,如
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形式?
因为默认的聚合函数。aggfunc
在 DataFrame.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