Python DataFrame:基于另一列的出现次数
Python DataFrame: count of occurances based on another column
我有一个 Python 团队数据框和他们取得的位置(1、2 或 3)
Team
place
A
1
A
1
A
1
A
2
A
3
A
1
A
1
B
2
B
2
我想操纵 df 看起来像下面这样。所以这是一个团队获得每个名次的频率。
Team
1
2
3
A
5
1
1
B
0
2
0
您可以获得每个组的值计数,然后取消堆叠索引。剩下的就是为了得到你的确切输出。
(df.groupby('Team')['place']
.value_counts()
.unstack(fill_value=0)
.reset_index()
.rename_axis(None, axis=1)
)
您可以使用 pandas.crosstab
:
pd.crosstab(df['Team'], df['place'])
或简单的 groupby
+size
和 unstack
:
(df.groupby(['Team', 'place']).size()
.unstack('place', fill_value=0)
)
输出:
place 1 2 3
Team
A 5 1 1
B 0 2 0
全部为列
(pd.crosstab(df['Team'], df['place'])
.rename_axis(columns=None)
.reset_index()
)
输出:
Team 1 2 3
0 A 5 1 1
1 B 0 2 0
我有一个 Python 团队数据框和他们取得的位置(1、2 或 3)
Team | place |
---|---|
A | 1 |
A | 1 |
A | 1 |
A | 2 |
A | 3 |
A | 1 |
A | 1 |
B | 2 |
B | 2 |
我想操纵 df 看起来像下面这样。所以这是一个团队获得每个名次的频率。
Team | 1 | 2 | 3 |
---|---|---|---|
A | 5 | 1 | 1 |
B | 0 | 2 | 0 |
您可以获得每个组的值计数,然后取消堆叠索引。剩下的就是为了得到你的确切输出。
(df.groupby('Team')['place']
.value_counts()
.unstack(fill_value=0)
.reset_index()
.rename_axis(None, axis=1)
)
您可以使用 pandas.crosstab
:
pd.crosstab(df['Team'], df['place'])
或简单的 groupby
+size
和 unstack
:
(df.groupby(['Team', 'place']).size()
.unstack('place', fill_value=0)
)
输出:
place 1 2 3
Team
A 5 1 1
B 0 2 0
全部为列
(pd.crosstab(df['Team'], df['place'])
.rename_axis(columns=None)
.reset_index()
)
输出:
Team 1 2 3
0 A 5 1 1
1 B 0 2 0