0
我DATAS這個樣子Python的大熊貓條件變換
Plate LogRatio
1 0.4
1 0.3
1 0.2
2 0.5
2 0.3
我謹板做3種數比的平均值:我不想數清我的平均極值數比(分位數排除)。
m1 = mean(LogRatio[LogRatio > q20LogRatio & LogRatio < q80LogRatio])
m2 = mean(LogRatio[LogRatio > q25LogRatio & LogRatio < q75LogRatio])
m3 = mean(LogRatio[LogRatio > q30LogRatio & LogRatio < q70LogRatio])
M = (m1 + m2 + m3)/3
我想是這樣的:
df['m1'] = df.groupby('Plate')['LogRatio'].transform(lambda x: ((x > x.quantile(q=0.20)) & (x < x.quantile(q=0.80))).mean())
df['m2'] = df.groupby('Plate')['LogRatio'].transform(lambda x: ((x > x.quantile(q=0.25)) & (x < x.quantile(q=0.75))).mean())
df['m3'] = df.groupby('Plate')['LogRatio'].transform(lambda x: ((x > x.quantile(q=0.30)) & (x < x.quantile(q=0.70))).mean())
df['M'] = (df['m1'] + df['m2'] + df['m3'])/3
但如果我這樣做手工了calc每個平均的結果是不一樣的。 在轉換函數中,我的邏輯條件是不是這樣理解的嗎?我知道結果是錯誤的,但在終端中沒有「錯誤」,所以我不知道該怎麼做。
好像你需要'Groupby.apply'而不是'transform',因爲你正在過濾組並將該功能僅應用於那些滿足條件的許多元素。另一方面,'Transform'適用於整個系列。也許,那是造成錯誤價值的原因。 –
'Groupby.apply'填充「NaN」到我的新列中。我想將這個函數應用到我所有的行上,因爲我在數據框中創建了新的列,這就是爲什麼我認爲「變換」是可以的,但是是的,你是對的,我從滿足條件的元素得到平均值,爲我的新專欄中的每一行。無論如何'申請'甚至不給我數字,只是「NaN」。 – Elysire