союз внутри союза это ОК? [Дубликат]

Используйте методы groupby и idxmax:

  1. передать col date в datetime:
    df['date']=pd.to_datetime(df['date'])
    
  2. получить индекс max столбца date, после groupyby ad_id:
    idx=df.groupby(by='ad_id')['date'].idxmax()
    
  3. получить требуемые данные:
    df_max=df.loc[idx,]
    

Out [54]:

ad_id  price       date
7     22      2 2018-06-11
6     23      2 2018-06-22
2     24      2 2018-06-30
3     28      5 2018-06-22
5
задан timrau 19 August 2012 в 01:56
поделиться

5 ответов

Предположим, вы хотите определить:

union myun {
  int x;
  sometype y;
};

, где sometype - typedef, определенный библиотекой, которую вы используете. Если библиотека реализовала его как тип объединения, то это будет объединение в союзе, и это будет иметь смысл, потому что вы не можете (с хорошей точки зрения дизайна) нарушать инкапсуляцию типа библиотеки.

6
ответ дан R.. 21 August 2018 в 14:28
поделиться
  • 1
    Хорошо, понял.. – Raj 30 September 2010 в 04:50
  • 2
    Это неправда. Для компиляции кода необходимо иметь тип REAL. Он может быть не прямым (это может быть typedef typedef typedef ...), но тип источника должен быть доступен где-то. – Let_Me_Be 9 October 2010 в 19:33

Да, это возможно и полезно. Причина такова, что X внутри Y полезен для многих значений X и Y: композиционность. Программы создаются путем сборки крошечных компонентов на небольшие компоненты в более крупные компоненты в огромные компоненты в ... Иногда объединяется множество союзов в объединение, и что?

R .. Ответ показывает пример, где это происходит за кулисами: просто случается, что один из типов членов объединения является объединением, но вы не знаете этого, если не посмотрите на реализацию библиотеки.


EDIT. Обратите внимание, что общая идиома для дискриминированных объединений, где каждый член объединения является структурой, первое поле которого является интегральным типом, содержащим тег, не распространяется на вложенные объединения. То есть следующая стандартная (стандартная совместимость) ( N1256 §6.5.2.3.5) реализация дискриминированных объединений в C:

struct generic {
    unsigned tag;
};
struct smallnum {
    unsigned tag; /*always TAG_SMALLNUM*/
    unsigned value;
};
struct bignum {
    unsigned tag; /*always TAG_BIGNUM*/
    size_t length;
    unsigned *p;
};
struct string {
    unsigned tag; /*always TAG_STRING*/
    size_t length;
    char *p;
};
union number {
    struct bignum bignum;
    struct smallnum smallnum;
};
union object {
    struct generic generic;
    struct bignum bignum;
    struct smallnum smallnum;
    struct string string;
};

Если у вас есть union object x, вы всегда можете прочитать его тег как x.generic.tag (или x.bignum.tag или любой другой), независимо от того, что было фактически присвоено объекту. Используя уникальные теги (дискриминаторы) для объектов.

Следующее определение является законным, но не полезно, поскольку вы не можете просто прочитать первое поле объекта union level2 для получения тега: if union level2 был записан как union number, вы должны прочитать его тег через член number, и в противном случае вы должны прочитать его тег через член generic или string. Я бы не удивился, если бы доступ через неправильный член работал на каждую существующую реализацию, но он не соответствует стандарту.

union level2 {
    struct generic generic;
    union number number;
    struct string string;
};
3
ответ дан Community 21 August 2018 в 14:28
поделиться

Да, объединение может содержать другой союз:

union foo {
  int x;
  double y;
  union bar {
    char blah[10];
    char *blurga;
  } bletch;
};

Я не могу думать о ситуации, когда это было бы полезно (или даже желательно).

0
ответ дан John Bode 21 August 2018 в 14:28
поделиться

Да, возможно. Но я бы склонен придерживаться совета никогда не использовать союзы. Число ситуаций, когда профсоюзы являются правильным ответом, очень невелико. Я подозреваю, что нет ситуации, когда союз, содержащий профсоюз, является хорошей идеей.

2
ответ дан Nick Fortescue 21 August 2018 в 14:28
поделиться
  • 1
    О, ты избил меня несколькими секундами. Хорошо, +1, так как это почти то, что я собирался опубликовать. – Christoffer 29 September 2010 в 16:58
  • 2
    "... существует ситуация no ... & quot; Разве вы не знаете, что вы должны никогда использовать абсолютные утверждения вроде этого? :) – semaj 29 September 2010 в 18:59
  • 3
    @Nick: Чепуха. Существует множество ситуаций, требующих объединения. На самом деле, программисты C, как правило, не используют союзы, когда они отвечают правильным (и используют слишком много отливок), поэтому вы должны рекламировать их для . – Gilles 29 September 2010 в 20:26
  • 4
    @Gilles: большинство применений профсоюзов вместо приведения указателей приводят к неопределенному поведению. – R.. 29 September 2010 в 22:03
  • 5
    @R ..: Нет, вы пропустили очень важный случай: с объединениями структур, в которых у структур есть первое поле того же типа, вы можете прочитать первое поле через любой компонент (N1256 §6.5.2.3.5). Это является основой для общепринятой, стандартно-совместимой реализации дискриминированного объединения в C. (Однако это диспенсация не распространяется на вложенные союзы, тема этого вопроса, поэтому мой пример был неправильным (теперь исправлено).) – Gilles 9 October 2010 в 19:29

Да, это возможно. Я не могу думать о хорошем использовании верхней части головы, хотя было бы легко придумать надуманный пример.

1
ответ дан Oliver Charlesworth 21 August 2018 в 14:28
поделиться
Другие вопросы по тегам:

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