python - 在 Pandas 中生成具有二进制计数值的交叉表类型数据框

标签 python pandas

我有一个像这样的 Pandas 数据框

UIID  ISBN
a      12
b      13

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

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

如何在 pandas 中完成此操作。我知道交叉表函数做同样的事情,但我想要这种格式的数据。

最佳答案

使用 crosstabmelt :

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.sizereindex通过 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

关于python - 在 Pandas 中生成具有二进制计数值的交叉表类型数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54645949/

相关文章:

python - 避免嵌套两个 for 循环

python - 我如何列出目录中的文件夹

python - Pandas:有没有办法使用类似 'droplevel' 的东西,并在处理过程中使用丢弃的级别标签作为前缀/后缀重命名其他级别?

python - 如何从 Pandas 日期时间索引中过滤特定月份

python - 如何在数据框中减去?

python - 为什么带有相同前缀的标志的 python 3.8 argparse 对我来说失败了?

python - django错误:1146, "Table ' basic_project.topics_topic'不存在”

python - 在 Python 中加密私钥

mysql - pymysql查询: unable to rollback

python - 使用python计算另外两列中彼此匹配的两行之间同一列中的持续时间?