根据它的标签计算一行中值的平均值:
bool subset_sum(int a[],int n, int sum)
{
bool dp[n+1][sum+1];
int i,j;
for(i=0;i<=n;i++)
dp[i][0]=true;
for(j=1;j<=sum;j++)
dp[0][j]=false;
for(i=1;i<=n;i++)
{
for(j=1;j<=sum;j++)
{
if(dp[i-1][j]==true)
dp[i][j]=true;
else
{
if(a[i-1]>j)
dp[i][j]=false;
else
dp[i][j]=dp[i-1][j-a[i-1]];
}
}
}
return dp[n][sum];
}
我希望输出为:0-&gt; 3; 1→ 7.8
pandas有groupby功能,但我不知道如何实现它。感谢
答案 0 :(得分:1)
这很简单groupby
问题......
Result=Result.T
Result.groupby(Result[1])[0].mean()
Out[372]:
1
0 3
1 8
Name: 0, dtype: int64
答案 1 :(得分:0)
首先,听起来你想要标记索引:
In [11]: Result = pd.DataFrame(data=[A, B], index=['A', 'B'])
In [12]: Result
Out[12]:
0 1 2 3 4 5 6 7 8 9
A 1 2 3 4 5 6 7 8 9 10
B 0 0 0 0 0 1 1 1 1 1
如果索引是唯一的,你不必进行任何分组,只需取每行的平均值(即轴= 1):
In [13]: Result.mean(axis=1)
Out[13]:
A 5.5
B 0.5
dtype: float64
但是,如果您有多个具有相同标签的行,那么您需要分组:
In [21]: Result2 = pd.DataFrame(data=[A, A, B], index=['A', 'A', 'B'])
In [22]: Result2.mean(axis=1)
Out[22]:
A 5.5
A 5.5
B 0.5
dtype: float64
注意:重复的行(碰巧与我懒惰地使用相同的行内容具有相同的意思),通常我们想要采用这些方法的平均值:
In [23]: Result2.mean(axis=1).groupby(level=0).mean()
Out[23]:
A 5.5
B 0.5
dtype: float64
注意:.groupby(level=0)
将具有相同索引标签的行分组。
答案 2 :(得分:0)
你通过构建数据框架来使自己变得困难,以便将你想要的东西和你想要成为标签的东西放在不同的行上。
选项1
groubpy
这涉及数据框Result
Result.loc[0].groupby(Result.loc[1]).mean()
1
0 3
1 8
Name: 0, dtype: int64
选项2
使用np.bincount
进行过度杀伤,因为您的分组值为0
和1
。我有一个解决方案,即使它们不是,但它使它更简单
我想使用原始列表A
和B
pd.Series(np.bincount(B, A) / np.bincount(B))
0 3.0
1 8.0
dtype: float64
选项3
构造一个系列而不是数据框
再次使用原始列表A
和B
pd.Series(A, B).mean(level=0)
0 3
1 8
dtype: int64