python - 删除pivot_table中的一列以更改分组逻辑

标签 python python-2.7 pandas

我有这个数据框:

df =
GROUP  HOUR  TOTAL_SERVICE_TIME  TOTAL_WAIT_TIME  IS_EVALUATED  IS_NEGATIVE_GRADE
AAA    7     24                  32               0             0
AAA    7     23                  30               1             0
AAA    8     25                  31               1             1
BBB    7     26                  33               1             0
BBB    8     27                  31               1             0

我想调整下面给出的代码以仅按GROUP对数据进行分组。我不想使用 HOUR 列。我想知道是否可以使用不带 HOURpivot_table,以便数据仅按 GROUP 分组,而忽略 HOUR >?

piv_df = df.pivot_table(index='GROUP', columns='HOUR', fill_value=0).stack()
avg_tot = piv_df[['TOTAL_SERVICE_TIME', 'TOTAL_WAIT_TIME']].add_prefix("AVG_")
avg_pct1 = piv_df['IS_EVALUATED'].mul(100).astype(int)
avg_pct2 = piv_df['IS_NEGATIVE_GRADE'].mul(100).astype(int)
fresult = avg_tot.join(avg_pct1.to_frame("AVG_PERCENT_EVAL_1")).join(avg_pct2.to_frame("AVG_PERCENT_NEGATIVE")).reset_index()

最佳答案

没有columns='Hour',您不再需要stack

piv_df = df.pivot_table(index='GROUP', fill_value=0)
avg_tot = piv_df[['TOTAL_SERVICE_TIME', 'TOTAL_WAIT_TIME']].add_prefix("AVG_")
avg_pct1 = piv_df['IS_EVALUATED'].mul(100).astype(int)
avg_pct2 = piv_df['IS_NEGATIVE_GRADE'].mul(100).astype(int)
fresult = avg_tot.join(avg_pct1.to_frame("AVG_PERCENT_EVAL_1")).join(avg_pct2.to_frame("AVG_PERCENT_NEGATIVE")).reset_index()

fresult

enter image description here

关于python - 删除pivot_table中的一列以更改分组逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41968714/

相关文章:

networking - Scapy 原始数据操作

python - 按列值将 CSV 文件分类为不同的 CSV

r - 使用首先处理的年份创建新变量

python - 如何在 FastAPI 中没有路由装饰器的情况下功能性地将函数分配给路由?

python - 如何使用 facebook python sdk 在 facebook 中扩展页面的 access_token

python - Pygame 在类中绘图

python - 扩大 Pandas 数据框,类似于 Pivot 或 Stack/Unstack

python - 使用 beautifulsoup 从 div 中抓取页面内容

python - 如何强制(带有警告)父函数由覆盖它们的子函数调用?

python - 如果文件 1 中的术语在文件 2 的行中,则将文件 2 中的整行写入文件 3