Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python groupby使用动态条件获取平均值_Python_Pandas_Pandas Groupby - Fatal编程技术网

Python 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分组的平均值,但有一个附加条件,即对于组

我一直在使用条件搜索groupby,并找到了许多关于这方面的帖子。这个例子:

然而,我找不到任何条件应用于自身的地方。在我的例子中,我希望得到平均值(或计数或任何其他公式),但我找不到的是在动态条件下过滤数据集

为了说明这一点,以下是汇总数据集:

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
-grouped
Total
列的
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
-grouped
Total
列的
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显式引用。