从pivot_table中删除其中一列以更改分组逻辑

时间:2017-01-31 22:32:46

标签: python python-2.7 pandas

我有dataframe

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。我想知道我是否可以在没有pivot_table的情况下使用HOUR,以便数据仅按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()

1 个答案:

答案 0 :(得分:3)

如果没有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