首页 > 解决方案 > 在 pandas 中生成具有二进制计数值的交叉表类型数据框

问题描述

我有一个像这样的熊猫数据框

UIID  ISBN
a      12
b      13

我想将每个 UUID 与 ISBN 进行比较,并在数据框中添加一个计数列。

UUID ISBN Count
 a     12   1
 a     13   0
 b     12   0
 b     13   1

如何在熊猫中做到这一点。我知道交叉表函数做同样的事情,但我想要这种格式的数据。

标签: pythonpandas

解决方案


crosstab与 一起使用melt

df = pd.crosstab(df['UIID'], df['ISBN']).reset_index().melt('UIID', value_name='count')
print (df)
  UIID ISBN  count
0    a   12      1
1    b   12      0
2    a   13      0
3    b   13      1

GroupBy.size使用and reindexby 的替代解决方案MultiIndex.from_product

s = df.groupby(['UIID','ISBN']).size()
mux = pd.MultiIndex.from_product(s.index.levels, names=s.index.names)
df = s.reindex(mux, fill_value=0).reset_index(name='count')
print (df)
  UIID  ISBN  count
0    a    12      1
1    a    13      0
2    b    12      0
3    b    13      1

推荐阅读