我想做一个包含字符串作为结果的表的透视。pandas - 使用非数字值的pivot_table? (DataError:没有数字类型来聚合)
import pandas as pd
df1 = pd.DataFrame({'index' : range(8),
'variable1' : ["A","A","B","B","A","B","B","A"],
'variable2' : ["a","b","a","b","a","b","a","b"],
'variable3' : ["x","x","x","y","y","y","x","y"],
'result': ["on","off","off","on","on","off","off","on"]})
df1.pivot_table(values='result',rows='index',cols=['variable1','variable2','variable3'])
,但我得到:DataError: No numeric types to aggregate
。
这按预期工作当我改变结果值的数字:
df2 = pd.DataFrame({'index' : range(8),
'variable1' : ["A","A","B","B","A","B","B","A"],
'variable2' : ["a","b","a","b","a","b","a","b"],
'variable3' : ["x","x","x","y","y","y","x","y"],
'result': [1,0,0,1,1,0,0,1]})
df2.pivot_table(values='result',rows='index',cols=['variable1','variable2','variable3'])
而且我得到我所需要的:
variable1 A B
variable2 a b a b
variable3 x y x y x y
index
0 1 NaN NaN NaN NaN NaN
1 NaN NaN 0 NaN NaN NaN
2 NaN NaN NaN NaN 0 NaN
3 NaN NaN NaN NaN NaN 1
4 NaN 1 NaN NaN NaN NaN
5 NaN NaN NaN NaN NaN 0
6 NaN NaN NaN NaN 0 NaN
7 NaN NaN NaN 1 NaN NaN
我知道我可以映射字符串到数字值,然后反向该操作,但也许有一个更优雅的解决方案?
最后一个解决方案,以取代pivot()熊猫更改0.17.1 – camdenl
@RandallGoodwin,我意识到这个问题是两岁,但我得到错误“ValueError:函数不会减少“使用你的拉姆达,你会知道为什么? – RustyShackleford
另一个想法:如果你可能会出现多个值,你可以通过使你的'aggfunc = lambda x:“”.join([x(y)中的[str(y)])来连接字符串' – dllahr