Пожалуйста, прочитайте Threading Model в приложениях пользовательского интерфейса, чтобы понять основные понятия. Ссылка перемещается на страницу, описывающую модель потоков WPF. Тем не менее, Windows Forms использует ту же идею.
[/g22]
[/g23]
[/g24]
[/g25]
[/g26]
Прочитать ответы на вопрос Как обновить графический интерфейс из другого потока в C #? . Для C # 5.0 и .NET 4.5 рекомендуемым решением является здесь .
Это сработало для меня:
df['count'] = df['count'].astype(int)
quantiles = [.25, .5, .75]
def get_offset(x):
s = x['count']
indices = [(s.sort_values()[::-1] <= s.quantile(q)).idxmax() for q in quantiles]
return df.iloc[indices, x.columns.get_loc('offset')]
res = df.groupby('obs_date').apply(get_offset).reset_index(level=0)
Тогда вы можете concat
с квантилями:
pd.concat([res.reset_index(drop=True), pd.Series(quantiles * df.obs_date.nunique())], axis=1)
obs_date offset 0
0 2018-01-01 178 0.25
1 2018-01-01 208 0.50
2 2018-01-01 224 0.75
3 2018-01-02 11 0.25
4 2018-01-02 12 0.50
5 2018-01-02 20 0.75