В python Dataframe, как добавить несколько строк, связанных с одной строкой в ​​другой фреймворк данных, в качестве дополнительных столбцов?

В C ++ существует только тонкая разница.

Стандарт языка C ( C89 §3.1.2.3 , C99 §6.2.3 , и C11 §6.2.3 ) задает отдельные пространства имен для разных категорий идентификаторов, включая идентификаторы тегов (для struct / union / enum) и обычных идентификаторов (для typedef и других идентификаторов).

Если вы только что сказали:

struct Foo { ... };
Foo x;

, вы получите ошибку компилятора, потому что Foo определяется только в пространстве имен тегов.

Вы должны были бы объявить его как:

struct Foo x;

В любое время, когда вы хотите обратиться к Foo, вам всегда нужно называть его struct Foo , Это раздражает быстро, поэтому вы можете добавить typedef:

struct Foo { ... };
typedef struct Foo Foo;

Теперь struct Foo (в пространстве имен тегов) и просто Foo (в пространстве имен обычного идентификатора) оба относятся к то же самое, и вы можете свободно объявлять объекты типа Foo без ключевого слова struct.


Конструкция:

typedef struct Foo { ... } Foo;

является просто аббревиатурой для объявление и typedef.


Наконец,

typedef struct { ... } Foo;

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


В C ++ все struct / union / enum / class декларации действуют так, как будто они неявно typedef 'ed, если имя не скрыто другим объявлением с тем же именем. См. ответ Майкла Берра для полной информации.

1
задан Frank AK 13 July 2018 в 09:11
поделиться

1 ответ

Использование:

g = df_scores.groupby('Player').cumcount().add(1)
df = df_scores.set_index(['Player',g]).unstack().sort_index(level=1, axis=1)
df.columns = ['{}-{}'.format(j, i) for i, j in df.columns]
print (df)
        1-INNG1  1-INNG2  2-INNG1  2-INNG2  3-INNG1  3-INNG2  4-INNG1  4-INNG2
Player                                                                        
RAHUL      55.0     35.0     75.0     25.0      NaN      NaN      NaN      NaN
RICKY      75.0     25.0     55.0     45.0     45.0     65.0     17.0     71.0
SACHIN     70.0     50.0     10.0     20.0      NaN      NaN      NaN      NaN
SAURBH    100.0    100.0      NaN      NaN      NaN      NaN      NaN      NaN
STEVE       7.0     17.0      NaN      NaN      NaN      NaN      NaN      NaN

df_result = df_team.join(df, on='Player')
print (df_result)
  Country  Player  1-INNG1  1-INNG2  2-INNG1  2-INNG2  3-INNG1  3-INNG2  \
0   India  SACHIN     70.0     50.0     10.0     20.0      NaN      NaN   
1   India   RAHUL     55.0     35.0     75.0     25.0      NaN      NaN   
2   India  SAURBH    100.0    100.0      NaN      NaN      NaN      NaN   
3     AUS   STEVE      7.0     17.0      NaN      NaN      NaN      NaN   
4     AUS    SHEN      NaN      NaN      NaN      NaN      NaN      NaN   
5     AUS   RICKY     75.0     25.0     55.0     45.0     45.0     65.0   

   4-INNG1  4-INNG2  
0      NaN      NaN  
1      NaN      NaN  
2      NaN      NaN  
3      NaN      NaN  
4      NaN      NaN  
5     17.0     71.0  

Объяснение:

  1. Сначала подсчитайте уникальные значения для каждой группы по cumcount
  2. ] Создайте MultiIndex с помощью set_index , измените форму unstack и измените порядок первого уровня на sort_index
  3. Сгладить MultiIndex по усмотрению списка
  4. Последний join к оригиналу DataFrame
2
ответ дан jezrael 17 August 2018 в 13:19
поделиться
Другие вопросы по тегам:

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