我想创建一个数据透视表,按月细分amount
(我做到了)和uniqueID
细分计数..uniqueID
的最后一部分是我正在努力解决的问题。
我有以下带有列的数据框:['Agent', 'Player', 'Amount', 'Month', 'UniqueID']
我能够做到以下几点:
尝试获取唯一 ID 的计数:
df['UniqueID']= df['UniqueID'].map(df['UniqueID'].value_counts())
我也试过——
df['UniqueID'] =len(set(df['UniqueID'])
成功创建了我的数据透视表
df = pd.pivot_table(df, index=['Agent','Player'], margins=True, margins_name='Total', columns=['Month'], values =['Amount','UniqueID'], aggfunc=np.sum)
但是,我得到的UniqueID
总数并不准确。 我正在尝试在我的枢轴中每月计算UniqueID
。 任何帮助将不胜感激。
让我们尝试使用aggfunc
的nunique
来UniqueID
而不是sum
:
df = pd.pivot_table(df, index=['Agent', 'Player'], margins=True,
margins_name='Total', columns=['Month'],
values=['Amount', 'UniqueID'],
aggfunc={'Amount': 'sum', 'UniqueID': 'nunique'})
nunique
将获取每个分组的唯一值计数。
Amount UniqueID
Month 1 2 3 Total 1 2 3 Total
Agent Player
A C 3.0 NaN NaN 3 1.0 NaN NaN 1 # nunique is 1
D NaN 3.0 NaN 3 NaN 1.0 NaN 1
B D NaN 4.0 NaN 4 NaN 1.0 NaN 1
E NaN NaN 5.0 5 NaN NaN 1.0 1
F NaN NaN 6.0 6 NaN NaN 1.0 1
Total 3.0 7.0 11.0 21 1.0 2.0 2.0 5
如果需要,也可以使用count
计算所有UniqueID
df = pd.pivot_table(df, index=['Agent', 'Player'], margins=True,
margins_name='Total', columns=['Month'],
values=['Amount', 'UniqueID'],
aggfunc={'Amount': 'sum', 'UniqueID': 'count'})
Amount UniqueID
Month 1 2 3 Total 1 2 3 Total
Agent Player
A C 3.0 NaN NaN 3 2.0 NaN NaN 2 # count is 2
D NaN 3.0 NaN 3 NaN 1.0 NaN 1
B D NaN 4.0 NaN 4 NaN 1.0 NaN 1
E NaN NaN 5.0 5 NaN NaN 1.0 1
F NaN NaN 6.0 6 NaN NaN 1.0 1
Total 3.0 7.0 11.0 21 2.0 2.0 2.0 6
<小时 />样本数据:
df = pd.DataFrame({
'Agent': ['A', 'A', 'A', 'B', 'B', 'B'],
'Player': ['C', 'C', 'D', 'D', 'E', 'F'],
'Amount': [1, 2, 3, 4, 5, 6],
'Month': [1, 1, 2, 2, 3, 3],
'UniqueID': [15, 15, 20, 21, 22, 23]
})
df
:
Agent Player Amount Month UniqueID
0 A C 1 1 15
1 A C 2 1 15
2 A D 3 2 20
3 B D 4 2 21
4 B E 5 3 22
5 B F 6 3 23