Как группировать по неделям в кадре данных pandas для определенного столбца? [Дубликат]

== проверяет ссылки на объекты, .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"));
11
задан coldspeed 25 November 2017 в 20:28
поделиться

4 ответа

Первый конвертировать столбец 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
19
ответ дан jezrael 17 August 2018 в 09:47
поделиться
  • 1
    Спасибо за ответ !. Но когда я использую ваш код, он показывает, TypeError: только действителен с DatetimeIndex, TimedeltaIndex или PeriodIndex, но получил экземпляр «Index» . Знаете ли вы, почему? благодаря – Ram 25 July 2017 в 09:34
  • 2
    Да, но он показывает ошибку, как указано выше – Ram 25 July 2017 в 09:40
  • 3
    Извините ... Но этого я не хочу. – Ram 25 July 2017 в 10:45
  • 4
    Большое спасибо, и код выглядит отлично !!!. Но у него есть исправление. Я хочу, чтобы дата выхода была в последний понедельник. Например, результат, orange, 07/14 / 17,20 , имеет дату на 2017-07-17 , но я хочу это на 2017-07-10 . – Ram 25 July 2017 в 11:07
  • 5
    Теперь это правильно, нужно вычесть только одну неделю. Проверьте отредактированный ответ. – jezrael 25 July 2017 в 11:08

Сначала конвертировать дату столбца to_datetime. Это будет группа по неделям, начиная с понедельника. Он выведет номер недели (но вы можете изменить это в

http://strftime.org/

df.groupby(['name', df['date'].dt.strftime('%W')])['quantity'].sum()

Выход:

name    date
apple   28      90
        29      30
orange  28      20
        30      40
0
ответ дан LN_P 17 August 2018 в 09:47
поделиться

Я думаю, что это намного проще, чем текущие ответы.

Создание 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
-1
ответ дан Myles Hollowed 17 August 2018 в 09:47
поделиться
  • 1
    Я думаю, вы пропустили часть о группировке по неделям, то есть 2017-07-20 и 2017-07-21 должны находиться в одной группе – matusko 5 February 2018 в 13:27

Используем 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
5
ответ дан Scott Boston 17 August 2018 в 09:47
поделиться
  • 1
  • 2
    Да, вам нужно преобразовать столбец data в dtype datetime. Используйте df ['Date'] = pd.to_datetime (df ['Date']). – Scott Boston 25 July 2017 в 13:04
Другие вопросы по тегам:

Похожие вопросы: