按多个变量分组多个变量?

时间:2015-06-02 02:28:16

标签: pandas

我有一个包含两个分类变量和两个整数变量的数据集。

我想按每个分类变量对每个整数变量进行分组,然后找到均值。下面的代码产生正确的输出,但使用forloop,似乎超级笨重。

有更好的方法吗?

In [15]:

import pandas as pd
import numpy as np
​
raw_data = {
    'category1': ['Red', 'Red', 'Red', 'Blue', 'Blue','Blue'],
    'category2': ['Car', 'Bike', 'Car', 'Bike', 'Car','Bike'],
    'integer1': list(np.random.randint(10, size=6)),
    'integer2': list(np.random.randint(10, size=6)),
    }
​
df = pd.DataFrame(raw_data)

In [18]:

category = ['category1','category2']
integer = ['integer1','integer2']

output=[]
​
for i, column in enumerate(df[category]):
        numeric_mean_per_category = df[integer].groupby(df[column]).mean().to_dict()
        output.append(numeric_mean_per_category)

In [19]:

output

Out[19]:
[{'integer1': {'Blue': 3.6666666666666665, 'Red': 6.333333333333333},
  'integer2': {'Blue': 3.6666666666666665, 'Red': 4.333333333333333}},
 {'integer1': {'Bike': 6.333333333333333, 'Car': 3.6666666666666665},
  'integer2': {'Bike': 2.6666666666666665, 'Car': 5.333333333333333}}]

2 个答案:

答案 0 :(得分:0)

我认为您所追求的是一系列数据透视表?:

for col in category:
    print(df.pivot_table(columns=col, values=integer))

category1      Blue       Red
integer1   5.333333  5.666667
integer2   5.666667  4.666667
category2      Bike       Car
integer1   5.666667  5.333333
integer2   5.333333  5.000000

答案 1 :(得分:0)

我会使用DataFrame.groupby函数,然后使用Transpose DataFrame。

private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter || e.Key == Key.Return)
    {
        YourTabControl.SelectedIndex = YourTabControl.SelectedIndex < 
            YourTabControl.Items.Count - 1 ? YourTabControl.SelectedIndex + 1 : 0;
    }
}