==
проверяет ссылки на объекты, .equals()
проверяет строковые значения.
Иногда кажется, что ==
сравнивает значения, потому что Java делает некоторые закулисные вещи, чтобы убедиться, что одинаковые строки в строке являются одним и тем же объектом.
Для Например:
String fooString1 = new String("foo");
String fooString2 = new String("foo");
// Evaluates to false
fooString1 == fooString2;
// Evaluates to true
fooString1.equals(fooString2);
// Evaluates to true, because Java uses the same object
"bar" == "bar";
Но будьте осторожны с нулями!
==
обрабатывает строки null
в порядке, но вызов .equals()
из пустой строки приведет к исключению:
String nullString1 = null;
String nullString2 = null;
// Evaluates to true
System.out.print(nullString1 == nullString2);
// Throws a NullPointerException
System.out.print(nullString1.equals(nullString2));
Итак, если вы знаете, что fooString1
может но не менее очевидно, что он проверяет значение null (из Java 7):
System.out.print(Objects.equals(fooString1, "bar"));
Первый конвертировать столбец 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
Сначала конвертировать дату столбца to_datetime. Это будет группа по неделям, начиная с понедельника. Он выведет номер недели (но вы можете изменить это в
blockquote>df.groupby(['name', df['date'].dt.strftime('%W')])['quantity'].sum()
Выход:
name date apple 28 90 29 30 orange 28 20 30 40
Я думаю, что это намного проще, чем текущие ответы.
Создание df:
df = pd.DataFrame({
'name' : ['apple', 'orange', 'apple', 'orange', 'apple'],
'date' : pd.to_datetime([
'7/10/17', '7/10/17', '7/10/17', '7/25/17', '7/20/17'
]),
'quantity' : [20, 20, 70, 40, 30]
})
Вход:
# Groupby 'date', then 'name'
# Grab the 'quantity' column from each group
# Take the sum of each 'quantity' column
df.groupby(['date', 'name'])['quantity'].sum()
Выход:
date name
2017-07-10 apple 90
orange 20
2017-07-20 apple 30
2017-07-25 orange 40
Name: quantity, dtype: int64
Используем groupby
, resample
с W-Mon
и sum
:
df.groupby('Name').resample('W-Mon', on='Date').sum().reset_index().sort_values(by='Date')
Выход:
Name Date Quantity
0 Apple 2017-07-17 90
3 orange 2017-07-17 20
1 Apple 2017-07-24 30
2 Orange 2017-07-31 40
data
в dtype datetime. Используйте df ['Date'] = pd.to_datetime (df ['Date']).
– Scott Boston
25 July 2017 в 13:04