python-3.x - 透视一个没有数字列的两列数据框进行聚合
问题描述
我有一个输入如下的数据框:
df1 = pd.DataFrame(
{'StoreId':
[244, 391, 246, 246, 130, 130] , 'PackageStatus': ['IN TRANSIT','IN TRANSIT','IN TRANSIT', 'IN TRANSIT','IN TRANSIT','COLLECTED',]}
)
StoreId PackageStatus
0 244 IN TRANSIT
1 391 IN TRANSIT
2 246 IN TRANSIT
3 246 IN TRANSIT
4 130 IN TRANSIT
5 130 COLLECTED
我期望的输出看起来像这样,包状态旋转到列并且它们的计数成为值:
StoreId IN TRANSIT COLLECTED
244 1 0
391 1 0
246 2 0
130 1 1
我遇到的所有示例都带有第三个数字列,其中完成了一些聚合(总和、平均值、平均值等)。
当我尝试
df1.pivot_table(index='StoreId',values='PackageStatus', aggfunc='count')
我得到以下信息:
PackageStatus
StoreId
130 2
244 1
246 2
391 1
就我而言,我需要一个简单的转置/旋转计数。如何做到这一点?谢谢你。
解决方案
使用columns="PackageStatus"
参数:
print(
df1.pivot_table(
index="StoreId", columns="PackageStatus", aggfunc="size", fill_value=0
)
)
印刷:
PackageStatus COLLECTED IN TRANSIT
StoreId
130 1 1
244 0 1
246 0 2
391 0 1
与.reset_index()
:
print(
df1.pivot_table(
index="StoreId", columns="PackageStatus", aggfunc="size", fill_value=0
)
.reset_index()
.rename_axis("", axis=1)
)
印刷:
StoreId COLLECTED IN TRANSIT
0 130 1 1
1 244 0 1
2 246 0 2
3 391 0 1
推荐阅读
- python - Django 提供静态文件,即使在 Debug 关闭且没有 Web 服务器设置为服务的情况下
- r - 错误:n() 只能在数据上下文中调用(包冲突)
- javascript - 显示和隐藏元素列表时,在页面的其余部分平滑 Nuxt/Vue 过渡
- flutter - 将列表转换为 Json 字符串,然后将此字符串转换回 Dart 中的列表
- android - 自定义视图按钮单击 AlertDialog
- architecture - 为项目推荐目的在微服务之间共享(几乎)相同的数据是否是个坏主意
- typescript - 带有约束的打字稿通用没有键
- c# - Base64EncodedString 不包括 NewLines
- python - Pandas 连接 cols/datatypes,int() 的无效文字,基数为 10
- java - 在使用 ReadBuffer 和 WriteBuffer 时,如何从下到上反转读取文本文件?