我正在使用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]是矩阵中的违规值。
答案 0 :(得分:1)
使用groupby获取col_1
和col_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