У меня есть серия pandas в следующем формате:
23-08-2018 06803fe4-a504-4520-8304-a76a3adcd488 0
23-08-2018 89efbfda-6edc-45a9-a0dd-e520fd8a3e2a 2839
23-08-2018 88f7ff3f-ede7-4dd0-bce9-0d25b598004d 2639
23-08-2018 10f049cb-c165-424a-b2db-99637cc2668c 0
23-08-2018 11a7ec38-a535-4f1c-acc4-c93471401dbd 0
23-08-2018 1292f360-41e5-463e-8547-002858ac0226 0
23-08-2018 145d17c0-9711-4445-8eed-7e7d35f0f896 0
23-08-2018 188d7578-8a3b-4fe5-807a-d098bce1d227 0
23-08-2018 89tfbfda-6edc-45a9-a0dd-e520fd8a3e2a 0
24-08-2018 000a7843-432f-4c67-9d7c-5d3e2ffac439 14000
24-08-2018 000cd8c7-94c7-4cb7-ad70-a60aec275f31 14655
24-08-2018 000dd787-ab81-40a7-a036-a05e4d11fea9 15655
24-08-2018 00115f12-4a50-4412-bc90-940a21a1af65 14655
24-08-2018 0012467d-53c1-4b5e-be8b-fc285d130968 17700
27-08-2018 1e806edd-1c96-4bdb-87b8-b01cb09cdb02 15
27-08-2018 d2c45e73-d5ca-4e28-ba54-4e24b4ee9be3 30
И я хочу, чтобы dataframe в следующей структуре:
Date AverageInteractionTime
23-08-2018 608.67 // (0+2839+2639+0+0+0+0+0+0)/9
24-08-2018 15333 // (14000+14655+15655+14655+17700)/5
27-08-2018 22.5 // (15+30)/2
В принципе, я хочу группировать серию согласно chatdate и получать среднее значение третьего столбца
Как я могу это сделать?
Если MultiIndex Series
использует только mean
с параметром level=0
:
print (s.index)
MultiIndex(levels=[['23-08-2018', '24-08-2018', '27-08-2018'], ['000a7843-432f-4c67-9d7c-5d3e2ffac439', '000cd8c7-94c7-4cb7-ad70-a60aec275f31', '000dd787-ab81-40a7-a036-a05e4d11fea9', '00115f12-4a50-4412-bc90-940a21a1af65', '0012467d-53c1-4b5e-be8b-fc285d130968', '06803fe4-a504-4520-8304-a76a3adcd488', '10f049cb-c165-424a-b2db-99637cc2668c', '11a7ec38-a535-4f1c-acc4-c93471401dbd', '1292f360-41e5-463e-8547-002858ac0226', '145d17c0-9711-4445-8eed-7e7d35f0f896', '188d7578-8a3b-4fe5-807a-d098bce1d227', '1e806edd-1c96-4bdb-87b8-b01cb09cdb02', '88f7ff3f-ede7-4dd0-bce9-0d25b598004d', '89efbfda-6edc-45a9-a0dd-e520fd8a3e2a', '89tfbfda-6edc-45a9-a0dd-e520fd8a3e2a', 'd2c45e73-d5ca-4e28-ba54-4e24b4ee9be3']],
labels=[[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2], [5, 13, 12, 6, 7, 8, 9, 10, 14, 0, 1, 2, 3, 4, 11, 15]],
names=['Date', 'Val'])
df = s.mean(level=0).reset_index(name='AverageInteractionTime')
#alternative solution
#df = s.groupby(level=0).mean().reset_index(name='AverageInteractionTime')
print (df)
Date AverageInteractionTime
0 23-08-2018 608.666667
1 24-08-2018 15333.000000
2 27-08-2018 22.500000
При необходимости разделите индекс на MultiIndex
:
print (s.index[:3])
Index(['23-08-2018 06803fe4-a504-4520-8304-a76a3adcd488',
'23-08-2018 89efbfda-6edc-45a9-a0dd-e520fd8a3e2a',
'23-08-2018 88f7ff3f-ede7-4dd0-bce9-0d25b598004d'],
dtype='object', name='Date')
s.index = s.index.str.split(expand=True)
df = s.mean(level=0).reset_index(name='AverageInteractionTime')
#alternative solution
#df = s.groupby(level=0).mean().reset_index(name='AverageInteractionTime')
Предполагая, что ваши 3 столбца: ['Date','Some_ID','AverageInteractionTime']
используйте groupby
on Date
и принимайте mean
AverageInteractionTime
как:
df.groupby('Date',as_index=False)['AverageInteractionTime'].mean()
Date AverageInteractionTime
0 23-08-2018 608.666667
1 24-08-2018 15333.000000
2 27-08-2018 22.500000
Для преобразования Series
в нужный Dataframe
и последующего использования кода выше:
print(s[:3])
0 23-08-2018 06803fe4-a504-4520-8304-a76a3adcd488 0
1 23-08-2018 89efbfda-6edc-45a9-a0dd-e520fd8a3e2...
2 23-08-2018 88f7ff3f-ede7-4dd0-bce9-0d25b598004...
df = s.str.split(' ',expand=True).rename(columns={0:'Date',1:'Some_ID',2:'AverageInteractionTime'})
df.groupby('col1')['col2'].mean()