Для гуглеров, которые приходят на этот старый вопрос:
Относительно комментария @ kekert к ответу @ Гаррета, чтобы использовать новый
df.groupby('id')['x'].rolling(2).mean()
, а не устаревший
df.groupby('id')['x'].apply(pd.rolling_mean, 2, min_periods=1)
Любопытно, что новый подход .rolling (). mean () возвращает многоиндексный ряд, сначала индексированный столбцом group_by, а затем индекс. В то время как старый подход просто возвращал серию, индексированную исключительно исходным индексом df, что, возможно, имеет меньшее значение, но очень удобно для добавления этой серии в новый столбец в исходный фрейм.
So Я думаю, что я нашел решение, которое использует новый метод roll (), и все еще работает одинаково:
df.groupby('id')['x'].rolling(2).mean().reset_index(0,drop=True)
, который должен дать вам серию
0 0.0
1 0.5
2 1.5
3 3.0
4 3.5
5 4.5
, которая вы можете добавить в качестве столбца:
df['x'] = df.groupby('id')['x'].rolling(2).mean().reset_index(0,drop=True)
Просто необходимо добавить открытый метод для вызова события. Microsoft уже делает это для некоторых событий такой как PerformClick для средств управления, которые представляют событие Click .
public class CustomGUIElement
{
public void PerformClick()
{
OnClick(EventArgs.Empty);
}
protected virtual void OnClick(EventArgs e)
{
if (Click != null)
Click(this, e);
}
}
Вы тогда сделали бы следующую внутреннюю часть Ваш обработчик событий в качестве примера...
public void CustomForm_Click(object sender, MouseEventArgs e)
{
_elements[0].PerformClick();
}
Действительно необходимо обернуть код, который Вы хотите быть в состоянии выполнить с внешней стороны в методе. Тот метод может тогда сделать то, что Ваше событие сделало бы - и то событие также вместо этого назовет тот метод.
Ключевое слово события в c# изменяет объявление делегата. Это предотвращает прямое присвоение на делегата (можно только использовать + = и - = на событии), и это предотвращает вызов делегата снаружи класса.
, Таким образом, Вы могли изменить свой код для сходства с этим:
public class CustomGUIElement
{
...
public MouseEventHandler Click;
// etc, and so forth.
...
}
Тогда можно вызвать событие снаружи класса как это.
myCustomGUIElement.Click(sender,args);
недостаток состоит в том, что код с помощью класса может перезаписать любые зарегистрированные обработчики очень легко с кодом как это:
myCustomGUIElement.Click = null;
, который не позволяется, если делегат Щелчка объявляется как событие.