Первый конвертировать столбец date
to_datetime
и вычесть одну неделю.
Затем используйте groupby
с Grouper
с помощью W-MON и агрегата sum
:
df['Date'] = pd.to_datetime(df['Date']) - pd.to_timedelta(7, unit='d')
df = df.groupby(['Name', pd.Grouper(key='Date', freq='W-MON')])['Quantity']
.sum()
.reset_index()
.sort_values('Date')
print (df)
Name Date Quantity
0 Apple 2017-07-10 90
3 orange 2017-07-10 20
1 Apple 2017-07-17 30
2 Orange 2017-07-24 40
Решение
Когда ваш фоновый процесс сталкивается с ситуацией, когда требуется, чтобы пользователь запрашивал ввод, используйте FutureTask , выполненный в Platform.runLater - showAndWait диалоговое приглашение в потоке приложения JavaFX. В фоновом режиме используйте futureTask.get , чтобы приостановить фоновый процесс, пока пользователь не введет необходимые значения, которые позволят продолжить процесс.
Образец Code snippet
Вот сущность кода для этого подхода, который может быть помещен внутри метода вызова вашего фонового процесса:
String nextText = readLineFromSource();
if ("MISSING".equals(nextText)) {
updateMessage("Prompting for missing text");
FutureTask<String> futureTask = new FutureTask(
new MissingTextPrompt()
);
Platform.runLater(futureTask);
nextText = futureTask.get();
}
...
class MissingTextPrompt implements Callable<String> {
private TextField textField;
@Override public String call() throws Exception {
final Stage dialog = new Stage();
dialog.setScene(createDialogScene());
dialog.showAndWait();
return textField.getText();
}
...
}
Пример приложения
Я создал небольшое, полное примерное приложение , чтобы продемонстрировать этот подход.
Выходной пример приложения-примера:
[/g9]
Пример вывода Объяснение
Линии, считанные без пропущенных значений, являются просто коричневыми. Строки с введенным быстрым значением имеют бледно-зеленый фон. Четырнадцать строк были прочитаны, фоновая задача уже приостановлена на 6-й строке, где отсутствует значение. Пользователю было предложено указать отсутствующее значение (к которому пользователь ввел xyzzy
), затем процесс продолжался до строки 14, которая также отсутствует, и фоновая задача снова приостановлена, и отображается диалоговое окно приглашения.