python - pandas 获取分组 df 中列的频率
问题描述
我有一个看起来像这样的数据框:
import pandas as pd
df = pd.DataFrame({'Name' : ['A', 'A', 'B','C','C','C','D','D'],
'ID' : ['1', '1', '2','3','3','4','4','4'],
'duration' : ['600', '3000', '3000', '600', '3000', '3000', '600','3000']})
我想得到这样的东西:
Name ID 600 3000
A 1 1 1
B 2 0 1
C 3 1 1
C 4 0 1
D 4 1 1
我尝试使用 groupby 似乎缺少一步
解决方案
您可以使用它pd.crosstab
来执行此操作:
counts = pd.crosstab(index=[df["Name"], df["ID"]], columns=df["duration"])
# Remove the name of the column array. It throws some people off to look at
counts = counts.rename_axis(columns=None).reset_index()
print(counts)
3000 600
Name ID
A 1 1 1
B 2 1 0
C 3 1 1
4 1 0
D 4 1 1
您还可以使用pivot_table
另一种方法:
counts = df.pivot_table(
index=["Name", "ID"], columns=["duration"], aggfunc="size", fill_value=0
)
counts = counts.rename_axis(columns=None)
print(counts)
3000 600
Name ID
A 1 1 1
B 2 1 0
C 3 1 1
4 1 0
D 4 1 1
推荐阅读
- terraform - Terraform 数据源中的获取值与计算值
- sql-server - 插入数据的SqlCommand没有作用
- javascript - 一个名为 Traceball 的简单 Javascript 游戏
- git - 为什么 Jenkins Git 插件会忽略我的 BRANCH 参数?
- angular - Angular动态添加一行
- java - Angular 1.7.2/Spring Boot - 包含导航栏和页脚时的无限模板加载
- sql - 将联系人导出到不同列的数据
- html - 多层背景的z-index问题
- sql - Tuning the below query
- r - 如何解决 R 中“plot.window(...) 中的错误:需要有限的 'xlim' 值”的问题