Python groupby使用动态条件获取平均值
我一直在使用条件搜索groupby,并找到了许多关于这方面的帖子。这个例子: 然而,我找不到任何条件应用于自身的地方。在我的例子中,我希望得到平均值(或计数或任何其他公式),但我找不到的是在动态条件下过滤数据集 为了说明这一点,以下是汇总数据集:Python groupby使用动态条件获取平均值,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我一直在使用条件搜索groupby,并找到了许多关于这方面的帖子。这个例子: 然而,我找不到任何条件应用于自身的地方。在我的例子中,我希望得到平均值(或计数或任何其他公式),但我找不到的是在动态条件下过滤数据集 为了说明这一点,以下是汇总数据集: ID | Seq | Total 1 | 1 | 1 1 | 2 | 2 1 | 3 | 3 2 | 1 | 1 2 | 2 | 2 2 | 3 | 1 如果我想得到按ID分组的平均值,但有一个附加条件,即对于组
ID | Seq | Total
1 | 1 | 1
1 | 2 | 2
1 | 3 | 3
2 | 1 | 1
2 | 2 | 2
2 | 3 | 1
如果我想得到按ID分组的平均值,但有一个附加条件,即对于组中的每个记录,必须只计算Seq较小的记录。这应该是结果
ID | Seq | Total | x
1 | 1 | 1 | 1 <-- mean of 1
1 | 2 | 2 | 1.5 <-- mean of 1 and 2
1 | 3 | 3 | 2 <-- mean of 1,2 and 3
2 | 1 | 1 | 1 <-- mean of 1
2 | 2 | 2 | 1.5 <-- mean of 1 and 2
2 | 3 | 1 | 1.33 < mean of 1, 2 and 1
ID | Seq | Total | x
1 | 1 | 1 | 1 | 1看起来您只是在尝试获取ID
-groupedTotal
列的expansing().mean()
,例如:
In []:
df['x'] = df.groupby('ID')['Total'].expanding().mean().values
df
Out[]:
ID Seq Total x
0 1 1 1 1.000000
1 1 2 2 1.500000
2 1 3 3 2.000000
3 2 1 1 1.000000
4 2 2 2 1.500000
5 2 3 1 1.333333
看起来您只是试图获取ID
-groupedTotal
列的expansing().mean()
,例如:
In []:
df['x'] = df.groupby('ID')['Total'].expanding().mean().values
df
Out[]:
ID Seq Total x
0 1 1 1 1.000000
1 1 2 2 1.500000
2 1 3 3 2.000000
3 2 1 1 1.000000
4 2 2 2 1.500000
5 2 3 1 1.333333
对不起,我不明白你想要实现什么。在这两个例子中,你是如何计算总数的?对不起,我刚刚更正了。总数是一个给定的值对不起,我不明白你想要实现什么。在这两个例子中,你是如何计算总数的?对不起,我刚刚更正了。Total是一个给定的值哇,我认为应该包括Seq,以便在计算平均值时只包括Seq Smaller的值。为什么在代码中只计算前面的值,而不计算完整的ID组?再次感谢groupby()
已经将数据分块,expansing()
提供了一个关于您正在查找的组的扩展窗口mean()
。可能值得强调的是,您需要订购Seq(以便扩展工作),并且需要订购ID(否则下降到.values
可能会给您带来麻烦,因为我们没有使用sort=False)@DSM很好,它假设ID
是有序的。不确定为什么你认为Seq
必须有序-它从来没有被引用过。@AChampion:er,因为Seq很明显指定了组中元素的顺序,如果这些元素被无序排列,那么结果的扩展平均值将不同,这正是因为Seq是never显式引用。哇,我认为应该包括Seq,以便在平均值的计算中只包括Seq Smaller的值。为什么在您的代码中只计算前面的值而不是完整的ID组?再次感谢groupby()
已经将数据分块,expansing()
为您正在查找的组提供了一个扩展窗口mean()
。可能值得强调的是,您需要订购Seq(这样扩展可以正常工作),并且需要订购ID(否则会下降到。值
可能会给您带来麻烦,因为我们没有使用sort=False)@DSM很好,它假设ID
是有序的。不确定为什么你认为Seq
必须有序-它从来没有被引用过。@AChampion:er,因为Seq很明显指定了组中元素的顺序,如果这些元素被无序排列,那么结果的扩展平均值将不同,这正是因为Seq是never显式引用。