我有一個資料框 df1 并且似乎無法跨列為每一行應用此函式。
import scipy.stats as stats
d = {'sample1':[2,3,1,0,5], 'sample2':[3,0,0,2,3], 'sample3':[0,0,0,3,4]}
df1 = pd.DataFrame(d)
# create new column containing p_value from kruskal test.
df1['p_val'] = df1.apply(lambda x: stats.kruskal(x.sample1, x.sample2, x.sample3), axis=1)
我不斷得到:
TypeError: len() of unsized object
df1:
sample1 sample2 sample3
0 2 3 0
1 3 0 0
2 1 0 0
3 0 2 3
4 5 3 4
所需的輸出(顯然我設定了 p_values):
sample1 sample2 sample3 P_val
0 2 3 0 0.07
1 3 0 0 0.2
2 1 0 0 0.001
3 0 2 3 0.5
4 5 3 4 0.02
uj5u.com熱心網友回復:
看起來像是scipy.kruskal在一維中增加了所以寫
df1['p_val'] = df1.apply(lambda x: stats.kruskal([x.sample1], [x.sample2], [x.sample3]), axis=1)
它將解決錯誤,但由于 Kruskal-Wallis H 測驗回傳測驗統計資料和 p 值,因此,修改您的代碼,例如
df1['test_stat'],df1['p_val'] = df1.apply(lambda x: stats.kruskal([x.sample1], [x.sample2], [x.sample3]), axis=1)
它將有助于檢索不同欄位中的兩個值
uj5u.com熱心網友回復:
看起來該scipy.kruskal函式需要您傳入的 3 個引數中的每一個都有一個數字陣列。
因此,修改 lambda 函式為行中的每個列條目生成一個串列就行了
df1['p_val'] = df1.apply(lambda x: stats.kruskal([x.sample1], [x.sample2], [x.sample3]), axis=1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/383061.html
