python - pandas - 具有非数值的 pivot_table? (数据错误 : No numeric types to aggregate)

标签 python pandas pivot-table dataframe

我正在尝试对包含字符串作为结果的表进行数据透视。

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

我知道我可以将字符串映射为数值然后反转操作,但也许有更优雅的解决方案?

最佳答案

我最初的回复是基于 Pandas 0.14.1,从那时起,pivot_table 函数发生了很多变化(行 --> 索引,列 --> 列...)

此外,我发布的原始 lambda 技巧似乎不再适用于 Pandas 0.18。您必须提供一个归约函数(即使它是最小值、最大值或平均值)。但即使那样似乎也不合适——因为我们没有减少数据集,只是对其进行转换……所以我更仔细地研究了 unstack……

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"]})

# these are the columns to end up in the multi-index columns.
unstack_cols = ['variable1', 'variable2', 'variable3']

首先,使用索引+要堆叠的列在数据上设置索引,然后使用级别参数调用 unstack。

df1.set_index(['index'] + unstack_cols).unstack(level=unstack_cols)

结果数据框如下。

enter image description here

关于python - pandas - 具有非数值的 pivot_table? (数据错误 : No numeric types to aggregate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19279229/

相关文章:

python在html中显示unicode

python - 使用 python-docx 突出显示文本

python - 如何将对应于 'n' 的值列表排序到按 'n' 排序的大表中

python - 将 StandardScaler 应用于数据集的各个部分

python - 从使用 apply() 方法的数据框中,如何返回包含数据框中元素列表的新列?

python - Pandas :用百分比制作数据透视表

python - Python OpenCV : Mutithreading with opecv video streaming

python - 对 Pandas 中的分组数据应用文本解析

具有多列数据的 Excel 数据透视表,并且一列中的每个数据点可以有多个值

excel - 将矩阵转换为 3 列表 ('reverse pivot' 、 'unpivot' 、 'flatten' 、 'normalize' )