给定这样的数据框:
df = pd.DataFrame({
'player': ['James', 'Henry', 'Abe', 'James', 'Henry', 'Brian', 'Claude', 'James'],
'team': ['A', 'B', 'A', 'B', 'A', 'A', 'A', 'C'],
'game': [101, 102, 103, 101, 102, 104, 105, 101],
'score': [10, 11, 12, 10, 11, 10, 12, 10]
})
我可以创建一个数据透视表,按球员和球队进行汇总,以比赛作为列并对得分进行求和:
pd.pivot_table(df, index = ['player', 'team'], columns = 'game', values = 'score', aggfunc = 'sum', fill_value = '')
这会返回一个像这样的表:
不过,我想做的是计算每个球员效力过的独特球队的数量,这样 Abe、Brian 和 Claude 都有 1 个,Henry 有 2 个,James 有 3 个。
我尝试过 nunique 和 count_values 但它们似乎只适用于数字,而不适用于字符串。我见过一些问题解决了在数据透视表的“值”部分中计算唯一值的问题,但在索引部分中没有解决。
IIUC用途:
df = pd.pivot_table(df, index = 'player', columns = 'game', values = 'team', aggfunc = 'nunique', fill_value = '')
print (df)
game 101 102 103 104 105
player
Abe 1.0
Brian 1.0
Claude 1.0
Henry 2.0
James 3.0
您可以使用
groupby
和 nunique
来完成
df.groupby('player')['team'].nunique()
player
Abe 1
Brian 1
Claude 1
Henry 2
James 3