1 回答

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊
pandas.DataFrame.groupby
在所需的列上使用。pandas.DataFrame.agg
對(duì)不同的列使用不同的函數(shù)我知道該列需要是測(cè)試結(jié)果,索引需要是其他協(xié)變量,但我不能將多個(gè)索引作為不同的變量。
pandas.DataFrame.reset_index
在特定級(jí)別刪除多索引。
問(wèn)題中提供的示例數(shù)據(jù)不容易像發(fā)布的那樣重現(xiàn),因此已為此答案提供了可重現(xiàn)的數(shù)據(jù)集。
import pandas as pd
import numpy as np
import random
# sample data
np.random.seed(365)
random.seed(365)
data = {'a': [np.random.randint(10) for _ in range(25)],
? ? ? ? 'groups': [random.choice(['1-5', '6-25', '26-100', '100-500', '500-1000', '>1000']) for _ in range(25)],
? ? ? ? 'treatment': [random.choice(['Yes', 'No']) for _ in range(25)],
? ? ? ? 'date': pd.bdate_range(datetime.today(), freq='d', periods=25).tolist()}
df = pd.DataFrame(data)
# display(df.head())
?a? groups treatment? ? ? ?date
?2? ?>1000? ? ? ?Yes 2020-07-20
?4? 26-100? ? ? ?Yes 2020-07-21
?1? ?>1000? ? ? ?Yes 2020-07-22
?5? ? 6-25? ? ? ? No 2020-07-23
?2? 26-100? ? ? ?Yes 2020-07-24
# groupby and aggregate different features of different columns
df.groupby(['groups', 'treatment']).agg({'a': 'mean', 'groups': 'count'}).reset_index(level='treatment')
? ? ? ? ?treatment? ? ? ? ?a? groups
groups? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
1-5? ? ? ? ? ? ?No? 5.000000? ? ? ?3
1-5? ? ? ? ? ? Yes? 7.000000? ? ? ?1
100-500? ? ? ? ?No? 5.500000? ? ? ?2
100-500? ? ? ? Yes? 3.000000? ? ? ?2
26-100? ? ? ? ? No? 9.000000? ? ? ?1
26-100? ? ? ? ?Yes? 2.666667? ? ? ?3
500-1000? ? ? ? No? 2.666667? ? ? ?3
500-1000? ? ? ?Yes? 7.500000? ? ? ?2
6-25? ? ? ? ? ? No? 5.500000? ? ? ?2
6-25? ? ? ? ? ?Yes? 5.333333? ? ? ?3
>1000? ? ? ? ? Yes? 2.000000? ? ? ?3
添加回答
舉報(bào)