我有一个包含两个分类变量和两个整数变量的数据集。
我想按每个分类变量对每个整数变量进行分组,然后找到均值。下面的代码产生正确的输出,但使用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}}]
答案 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;
}
}