Python 如何在熊猫中按分组进行筛选
我是熊猫的新手。我有以下数据集。 将数据集视为公司的部门(“k1”)和人员(“k2”)Python 如何在熊猫中按分组进行筛选,python,pandas,Python,Pandas,我是熊猫的新手。我有以下数据集。 将数据集视为公司的部门(“k1”)和人员(“k2”) dframe = pd.DataFrame({'k1': ['X','X','Y','Y','Z','Z'], ...: 'k2': ['P1','P2','P3','P4','P5','P6'], ...: 'dataset1': np.random.randn(6)}) ...: 如果我取
dframe = pd.DataFrame({'k1': ['X','X','Y','Y','Z','Z'],
...: 'k2': ['P1','P2','P3','P4','P5','P6'],
...: 'dataset1': np.random.randn(6)})
...:
如果我取按部门/k1分组的平均值,我得到以下结果
dataset1
k1
X 0.153825
Y -0.648500
Z 1.133334
In [6]: dframe.groupby('k2').mean()
Out[6]:
dataset1
k2
P1 1.595455
P2 -1.287805
P3 0.211858
P4 -1.508859
P5 1.350336
P6 0.916332
如果我取按人/k2分组的平均值,我得到以下结果
dataset1
k1
X 0.153825
Y -0.648500
Z 1.133334
In [6]: dframe.groupby('k2').mean()
Out[6]:
dataset1
k2
P1 1.595455
P2 -1.287805
P3 0.211858
P4 -1.508859
P5 1.350336
P6 0.916332
我的问题是如何只过滤按人员/k2分组的平均值,该值大于它所属的dept/k1的平均值。e、 g.P1平均值大于其所属的X平均值
Out[6]:
dataset1
k2
P1 1.595455
P3 0.211858
P5 1.350336
样本(将P6
更改为P5
):
首先通过和创建新列:
然后按mean
进行聚合,并且还需要将k1
列添加到groupby
中,以避免在另一个k1
中出现相同的k2
时输出错误
dframe = dframe.groupby(['k1','k2']).agg({'dataset1':'mean', 'meank1':'first'})
print (dframe)
meank1 dataset1
k1 k2
X P1 0.143348 0.026375
P2 0.143348 0.260322
Y P3 -0.299723 -0.395146
P4 -0.299723 -0.204301
Z P5 -1.934256 -1.934256
由或进行最后筛选:
如果要删除第一级多索引
添加:
对于索引中的列,请使用:
dframe = dframe.reset_index(level=0, drop=True).reset_index()
print (dframe)
k2 dataset1
0 P1 0.026375
1 P3 -0.395146
非常感谢,耶斯雷尔。我明白了转化的作用。美丽
dframe = dframe.reset_index(level=0, drop=True)
print (dframe)
dataset1
k2
P1 0.026375
P3 -0.395146
dframe = dframe.reset_index(level=0, drop=True).reset_index()
print (dframe)
k2 dataset1
0 P1 0.026375
1 P3 -0.395146