В 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, если имя не скрыто другим объявлением с тем же именем. См. ответ Майкла Берра для полной информации.
Использование:
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
Объяснение:
cumcount
MultiIndex
с помощью set_index
, измените форму unstack
и измените порядок первого уровня на sort_index
MultiIndex
по усмотрению списка join
к оригиналу DataFrame