Pandas:pivot_table唯一计数返回计数

时间:2014-12-14 23:31:39

标签: python pandas unique pivot-table

我正在使用pandas编写几个数据透视表。对于其中许多人,我需要返回唯一值。在二维数据透视表中,下面的代码可以正常工作。当我添加第三个维度时,代码返回计数而不是唯一计数。我怀疑这与aggfunc有关,但不能确定它应该改变什么。

代码如下:

data = pd.read_csv('scrubbed_data.csv', usecols = ['col_1', 'col_2', 'col_3'])
cd1 = pd.tools.pivot.pivot_table(data = data, values = 'col_2', index = 'col_1', columns = 'col_3', aggfunc=lambda x: len(x.unique()))
cd1.to_csv('pivot.csv')

以下是按要求提供的数据模型:

col_1               col_2               col_3
location_1          id_1                type_1
location_1          id_1                type_1
location_2          id_1                type_1
location_1          id_2                type_3
location_3          id_3                type_4

目标是在给定col_1和col_3的情况下计算col_2中唯一条目的数量。应该出现的是:

.            type_1    type_2    type_3    type_4
location_1  1             0             1             0
location_2  1             0             0             0 
location_3  0             0             0             0 

但是,返回以下内容:

.           type_1    type_2    type_3    type_4
location_1  2             0             1             0
location_2  1             0             0             0 
location_3  0             0             0             0 

其中[1,1]是矩阵中的违规值。

1 个答案:

答案 0 :(得分:1)

使用groupby获取col_1col_3的每个组合,然后取消堆栈以将col_3值作为列:

# Copying your data and reading from the clipboard:
df = pd.read_clipboard()

unique_counts = df.groupby(['col_1', 'col_3'])['col_2'].unique().map(len)
unstacked = unique_counts.unstack(level='col_3').fillna(0)

输出:

unstacked
Out[18]: 
col_3       type_1  type_3  type_4
col_1                             
location_1       1       1       0
location_2       1       0       0
location_3       0       0       1