python - 在 pandas 中生成具有二进制计数值的交叉表类型数据框
问题描述
我有一个像这样的熊猫数据框
UIID ISBN
a 12
b 13
我想将每个 UUID 与 ISBN 进行比较,并在数据框中添加一个计数列。
UUID ISBN Count
a 12 1
a 13 0
b 12 0
b 13 1
如何在熊猫中做到这一点。我知道交叉表函数做同样的事情,但我想要这种格式的数据。
解决方案
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 reindex
by 的替代解决方案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
推荐阅读
- android - 片段变化后失去焦点(ANDROID TV)
- php - 如何在准备好的语句中执行多个查询?
- javascript - XMLHttpRequest 返回未定义
- asp.net-mvc-5 - 没有找到视图“删除”或其主人 asp.net mvc5
- redirect - 新的 TYPO3 版本。10.4 安装在所有子页面上显示 404
- elasticsearch - Logstash 文件输入未写入 AWS EC2 上的 Elasticsearch 安装
- flutter - 如何设置 ChangeNotifier 以加载语言环境文件
- r - igraph 中代表最多的 10 个节点的子图
- sass - 我正在尝试使用 Foundation scss 建立一个新网站,但是,每次我尝试运行 sass 时都会出现此错误
- jenkins - Bitbucket webhook 正在触发存储库的所有 Jenkins 作业?