首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据另一个数据帧的分组对数据帧中的列进行平均

如何根据另一个数据帧的分组对数据帧中的列进行平均
EN

Stack Overflow用户
提问于 2016-01-21 02:46:09
回答 2查看 59关注 0票数 0

我有两个CSV数据,如下所示:

代码语言:javascript
复制
gene,stem1,stem2,stem3,b1,b2,b3,t1
foo,20,10,11,23,22,79,3
bar,17,13,505,12,13,88,1
qui,17,13,5,12,13,88,3

这是:

代码语言:javascript
复制
celltype,phenotype
SC,stem1
BC,b2
SC,stem2
SC,stem3
BC,b1
TC,t1
BC,b3

数据框架如下所示:

代码语言:javascript
复制
In [5]: import pandas as pd
In [7]: main_df = pd.read_table("http://dpaste.com/2MRRRM3.txt", sep=",")

In [8]: main_df
Out[8]:
      gene  stem1  stem2  stem3  b1  b2  b3  t1
    0  foo     20     10     11  23  22  79   3
    1  bar     17     13    505  12  13  88   1
    2  qui     17     13      5  12  13  88   3


In [11]: source_df = pd.read_table("http://dpaste.com/091PNE5.txt", sep=",")

In [12]: source_df
Out[12]:
  celltype phenotype
0       SC     stem1
1       BC        b2
2       SC     stem2
3       SC     stem3
4       BC        b1
5       TC        t1
6       BC        b3

我想做的是根据main_df中的分组来平均source_df中的每一列。所以最后看起来是这样的:

代码语言:javascript
复制
       SC                BC                TC
foo   (20+10+11)/3     (23+22+79)/3        3/1
bar   (17+13+505)/3    (12+13+88)/3        1/1
qui   (17+13+5)/3      (12+13+88)/3        3/1

我怎样才能做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-21 03:02:49

您可以将source_df转换为dict,并使用.groupby() on axis=1将其应用于main_df

代码语言:javascript
复制
main_df.set_index('gene', inplace=True)
col_dict = source_df.set_index('phenotype').squeeze().to_dict()
main_df.groupby(col_dict, axis=1).mean()

             BC          SC  TC
gene                           
foo   41.333333   13.666667   3
bar   37.666667  178.333333   1
qui   37.666667   11.666667   3
票数 1
EN

Stack Overflow用户

发布于 2016-01-21 05:57:31

您可以为source_dfmain_df设置索引,然后通过celltype使用pd.concatgroupby

代码语言:javascript
复制
main_df.set_index('gene', inplace=True)
source_df.set_index("phenotype", inplace=True)

In [30]: pd.concat([main_df.T, source_df], axis=1)
Out[30]:
gene   foo  bar  qui celltype
b1      23   12   12       BC
b2      22   13   13       BC
b3      79   88   88       BC
stem1   20   17   17       SC
stem2   10   13   13       SC
stem3   11  505    5       SC
t1       3    1    3       TC


In [33]: pd.concat([main_df.T, source_df], axis=1).groupby(['celltype']).mean().T
Out[33]:
celltype         BC          SC  TC
gene
foo       41.333333   13.666667   3
bar       37.666667  178.333333   1
qui       37.666667   11.666667   3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34914512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档