例如,我们有以下数据:
#include <stdio.h>
int main(int argc, char **argv)
{
int n = 6;
int tab[6] = {1,2,8,4,5,6};
int diff = tab[1] - tab[0], maxdiff = diff, i;
for(i=2; i<n-1; i++)
{
if(diff > maxdiff)
maxdiff = diff;
diff = tab[i] - tab[i-1];
}
printf("%d\n", diff);
return 0;
}
我想得到像
这样的结果>>> df
name score times
0 tom 100 1
1 tom 99 2
2 tom 100 3
3 jack 99 1
4 jack 99 2
5 tony 100 1
6 tony 100 2
7 tony 100 3
是否可以立即获得结果? 现在我必须单独计算它们并结合结果
答案 0 :(得分:2)
使用agg
In [274]: df.groupby('name').agg({'score': ['mean', 'std']})
Out[274]:
score
mean std
name
jack 99.000000 0.00000
tom 99.666667 0.57735
tony 100.000000 0.00000
答案 1 :(得分:1)
您可以应用@media Rule
功能来计算agg
mean
然后你将获得multiindex dataFrame,以提取级别做以下。
df = df.groupby('name').agg({'score': ['mean', 'std']})
如您给出的输出请执行以下操作:
df = df.xs('score', axis=1, drop_level=True)
# 'score' : key on which to get cross section
# axis=1 : get cross section of column
# drop_level=True : returns cross section without the multilevel index
然后重命名
df = df.reset_index('name')
输出:
df.rename(columns={"mean":"score"}, inplace=True)
答案 2 :(得分:0)
要准确获取所需内容,您可以先按名称分组,计算分数的均值和标准,然后重命名并重新索引。
(
df.groupby('name').score.agg(['mean','std'])
.rename(columns={'mean':'score'}).reset_index()
)
Out[204]:
name score std
0 jack 99.000000 0.00000
1 tom 99.666667 0.57735
2 tony 100.000000 0.00000