給出一個數據幀的熊貓與類別列family
和數值列score
組的數量,我想family
誰高於(或低於)必須得到這些的數量爲家庭中位數score
。大熊貓得到上述中值水平
概念上的東西呢? df.groupby('family')['score'].median().filter(lambda x: x>x.median)
任何幫助?
給出一個數據幀的熊貓與類別列family
和數值列score
組的數量,我想family
誰高於(或低於)必須得到這些的數量爲家庭中位數score
。大熊貓得到上述中值水平
概念上的東西呢? df.groupby('family')['score'].median().filter(lambda x: x>x.median)
任何幫助?
這聽起來像你正在尋找類似
df[df.score > df.groupby('family').score.transform('median')].groupby('family').count()
這是你想要的嗎?通過這樣做,您可以同時在上方和下方進行操作。
df.groupby('family')['Score'].apply(lambda x : pd.Series(x>np.median(x)).value_counts())
樣本數據:
df = pd.DataFrame({'family': ['a','b','c']*3, 'B': ['d','e','f']*3, 'Score': [1,2,3,3,2,3,2,3,1]})
輸出地說:
Out[31]:
family
a False 2
True 1
b False 2
True 1
c False 3
Name: Score, dtype: int64
獎勵:
df.groupby('family')['Score'].apply(lambda x : pd.Series(x>np.median(x)).value_counts()).\
unstack().rename(columns={True:'Above_med',False:'Below_med'})
Out[34]:
Below_med Above_med
family
a 2.0 1.0
b 2.0 1.0
c 3.0 NaN
你可以嘗試這樣的事:
df = pd.DataFrame({'family':['Family '+str(i) for i in np.random.choice(list('ABCD'),100)],'score':np.random.randint(40,100,100)})
above_avg = lambda x: (x>x.mean()).sum()
above_avg.__name__ = 'Above Average'
below_avg = lambda x: (x<=x.mean()).sum()
below_avg.__name__ = 'Below Average'
df.groupby('family')['score'].agg([above_avg, below_avg])
輸出:
Above Average Below Average
family
Family A 9 12
Family B 11 15
Family C 12 12
Family D 15 14
我會使用一個數據集lambda
,充分利用numpy
f = lambda x: (lambda v: np.count_nonzero(v > np.median(v)))(x.values)
df.groupby('family').Score.apply(f)
您可以張貼小樣本數據集和期望? – MaxU
你會不會假設所有分數都不同?在這種情況下,所有你需要的是'df.groupby('family')。count()// 2'。 – fuglede