Python:数据帧中的数据透视表中的唯一值计数



我想创建一个数据透视表,按月细分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。 任何帮助将不胜感激。

让我们尝试使用aggfuncnuniqueUniqueID而不是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

最新更新