我正在尝试像这样旋转数据框
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是否应采用可旋转的形式?
答案 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