1

次のコードがあります。

df0 = pd.DataFrame([[1,2],[2,2],[3,1],[4,4],[5,4]], columns = ['A','B'])
switch = [[1,3,4],[2,5]]

collect = []
for lists in switch:
    mask = df0.A.isin(lists)
    dat = df0[mask]
    avg=dat.mean().round(2)
    _, p_val = stats.ttest_rel(dat.iloc[0],dat.iloc[1])
    
    collect.append(avg)
    collect.append(p_val.round(2))

これにより、次が生成されます。

[A    2.67
 B    2.33
 dtype: float64,
 0.8,
 A    3.5
 B    3.0
 dtype: float64,
 0.13]

でも私はしたい:

 A     B     C
2.67  2.33  0.8
3.5   3.0   0.13

私の問題は、collectpd.Series と数字を含む混乱したリストだと思います。望ましい結果を生み出すための最もパンダらしい方法は何ですか? または、ループを使用せずにベクトル化を使用して、平均値と p 値を見つける方法を改善する方法はありますか?

4

1 に答える 1