1 回答

TA貢獻1856條經驗 獲得超5個贊
pandas.DataFrame.groupby
在所需的列上使用。pandas.DataFrame.agg
對不同的列使用不同的函數我知道該列需要是測試結果,索引需要是其他協變量,但我不能將多個索引作為不同的變量。
pandas.DataFrame.reset_index
在特定級別刪除多索引。
問題中提供的示例數據不容易像發布的那樣重現,因此已為此答案提供了可重現的數據集。
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
添加回答
舉報