#python #pandas #dataframe
Вопрос:
Я хотел бы создать сводную таблицу, которая раскрывается amount
(что я и сделал), и подсчитать uniqueID
разбивку по месяцам .. последняя часть uniqueID
-это то, с чем я борюсь.
У меня есть следующий фрейм данных с колонками: ['Agent', 'Player', 'Amount', 'Month', 'UniqueID']
Я смог сделать следующее:
Пытаюсь получить счетчик для UniqueID:
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
в месяц в своей сводке.
Любая помощь будет вам очень признательна.
Комментарии:
1. Пожалуйста, включите образец
df
Ответ №1:
Давайте попробуем с 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
s
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