0

次の形式の実験からのデータがあります。ここでは、各実験と処理が重複して実行され、ヒットは特定のイベントに関連する遺伝子です。

experiment  treatment   replicate   hit
1   1   1   gene1
1   1   1   gene2
1   1   1   gene1
1   1   1   gene1
1   1   2   gene1
1   1   2   gene1
1   2   1   gene1
1   2   1   gene2
1   2   2   gene2
1   2   2   gene2

私がやりたいことは、治療内の各遺伝子の平均数を計算することです.

以下を使用して、実験ごとの遺伝子数を取得できますvalue_counts()

counts = df['hit'].groupby([df['experiment'], df['treatment'],
                            df['replicate']]
                          ).value_counts().unstack()

次のような出力が生成されます。

experiment  treatment   replicate    gene1  gene2
1   1   1   3   1
1   1   2   2   NA
1   2   1   1   1
1   2   2   NA  2

しかし、私が本当に欲しいのは、治療ごとの平均カウントなので、(NA を 0 に置き換えると仮定して):

experiment  treatment   gene1   gene2
1   1   2.5 0.5
1   2   0.5 1.5

何か案は?value_counts に適用する.mean()と、各レプリケートではなく、すべての列の平均が得られるようです。

4

2 に答える 2

0

過小評価されているものを使用することもできますpd.get_dummies

In [31]: pd.get_dummies(df.hit)
Out[31]:
   gene1  gene2
0      1      0
1      0      1
2      1      0
3      1      0
4      1      0
5      1      0
6      1      0
7      0      1
8      0      1
9      0      1

In [32]: df2 = pd.get_dummies(df.hit).groupby([df.experiment,df.treatment,df.replicate]).sum(); df2
Out[32]:
                                gene1  gene2
experiment treatment replicate
1          1         1              3      1
                     2              2      0
           2         1              1      1
                     2              0      2

In [34]: df2.groupby(level='treatment').mean()
Out[34]:
           gene1  gene2
treatment
1            2.5    0.5
2            0.5    1.5
于 2013-02-21T19:46:46.393 に答える
0

あなたが持っているテーブルを取り、別のグループ化を行うだけです:

>>> g = d.hit.groupby([d.experiment, d.treatment, d.replicate]).value_counts().unstack().reset_index()
>>> print g
   experiment  treatment  replicate  gene1  gene2
0           1          1          1      3      1
1           1          1          2      2    NaN
2           1          2          1      1      1
3           1          2          2    NaN      2
>>> print g.fillna(0).groupby(['experiment', 'treatment']).mean()
                      replicate  gene1  gene2
experiment treatment                         
1          1                1.5    2.5    0.5
           2                1.5    0.5    1.5

反復数の平均​​である余分な意味のない列が得られますが、それを捨てることができます.

于 2013-02-21T19:36:05.393 に答える