使用多个标准操纵pandas.DataFrame

时间:2017-01-06 01:01:01

标签: python pandas dataframe grouping

例如,我有一个数据框:

df = pd.DataFrame({'Value_Bucket': [5, 5, 5, 10, 10, 10], 
                   'DayofWeek': [1, 1, 3, 2, 4, 2], 
                   'Hour_Bucket': [1, 5, 7, 4, 3, 12], 
                   'Values': [1, 1.5, 2, 3, 5, 3]})

实际数据集相当大(5000行+)。如果“Value_Bucket”= 5,我希望在'Values'上执行函数,并且对于“DayofWeek”和“Hour_Bucket”的每个可能组合。

本质上,数据将被分组为24行(Hour_Bucket)和7列(DayofWeek)的表格,并且每个单元格都填充有函数的结果(例如,平均值)。我可以将groupby函数用于1个标准,有人可以解释我如何对两个条件进行分组并将结果制表到表格中吗?

2 个答案:

答案 0 :(得分:2)

  • query到子集
  • groupby
  • unstack
df.query('Value_Bucket == 5').groupby(
    ['Hour_Bucket', 'DayofWeek']).Values.mean().unstack()

DayofWeek      1    3
Hour_Bucket          
1            1.0  NaN
5            1.5  NaN
7            NaN  2.0

如果您想要使用零而不是NaN

df.query('Value_Bucket == 5').groupby(
    ['Hour_Bucket', 'DayofWeek']).Values.mean().unstack(fill_value=0)

DayofWeek      1    3
Hour_Bucket          
1            1.0  0.0
5            1.5  0.0
7            0.0  2.0

答案 1 :(得分:1)

对于我来说,数据透视表似乎比groupby与disstack配对更自然,尽管他们完全相同。

pd.pivot_table(data=df.query('Value_Bucket == 5'), 
               index='Hour_Bucket', 
               columns='DayofWeek', 
               values='Values', 
               aggfunc='mean',
               fill_value=0)

输出

DayofWeek      1  3
Hour_Bucket        
1            1.0  0
5            1.5  0
7            0.0  2