In [15]: def sum_col(df, col, new_col):
....: df[new_col] = df[col].sum()
....: return df
In [16]: df.groupby("A").apply(sum_col, 'values', 'sum_values_A')
Out[16]:
A B values sum_values_A
0 1 1 10 25
1 1 2 15 25
2 2 1 20 45
3 2 2 25 45
У меня есть отдельная DLL для услуг. Там есть MessageBoxService
.
Этот сервис ссылается на окно. Я оставлю реализацию до вас.
Мой Сервис реализует интерфейс для инъекций, но это не так, просто на всякий случай.
Вот фрагмент кода, который он предоставляет:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Threading;
namespace Services.MessageBox
{
public class MessageBoxService : IMessageBoxService
{
Dispatcher dispatcher;
private Window mainWindow;
public MessageBoxService()
{
dispatcher = Application.Current.Dispatcher;
mainWindow = Application.Current.MainWindow;
}
private void UIThread(Action execute)
{
dispatcher.Invoke(execute);
}
public void Show(string caption, string message)
{
UIThread(() =>
{
System.Windows.MessageBox.Show(mainWindow, message, caption, System.Windows.MessageBoxButton.OK);
});
}
public bool? ShowDialog(string caption, string message)
{
bool? result = null;
UIThread(() =>
{
result = new Windows.Modal(message, caption).ShowDialog(mainWindow);
});
return result;
}
}
}
Тогда вы будете использовать его в своей ViewModel следующим образом:
var answer = messageBoxService.ShowDialog("Title Here", "Message to display");