子样本丰度数据框架

2024-10-06 07:15:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框架,其中物种作为列,站点作为行。在每个细胞里都是我在那个地方看到的每个物种的数量。e、 g

    Fern1   Fern2   Flower1 Flower2
Site1   15  0   6   1
Site2   0   46  16  40
Site3   25  1   19  3

总计=172 但我想从这个数据集中随机抽取100个人:

    Fern1   Fern2   Flower1 Flower2
Site1   10  0   3   0
Site2   0   26  10  26
Site3   14  0   10  1

(这个例子不是随机的,但我想要的是随机的)

所以我开始做

df.stack()
df[df != 0]
Site1   Fern1   15
        Flower1 6
        Flower2 1
Site2   Fern2   46
        Flower1 16
        Flower2 40

这是我需要帮助的部分 现在我想从1:len(count)创建组 e、 g


Site1  Fern1  1     1
              2     1
              3     1
              4     1
              ...   ...
              16    1
      Flower1 1     1

这样我就可以使用python示例了。
我找到了this,但它并不能满足我的需要。任何帮助都将不胜感激。我试图寻找尽可能多,因为这是一个很常见的问题,但在一个有点匆忙,并认为有人可能已经这样做了。你知道吗

提前谢谢。你知道吗

pandas: create a column from 1 to length of each group

result = df.groupby(df.index).transform(lambda x: np.arange(1,len(x)+1))

上面在我的专栏文章中给出了一堆[1],以及原始索引。你知道吗


Tags: 数据框架dflen站点物种地方细胞
2条回答

好的,这就是我最后要做的(在将我的堆积df从一个系列转换回一个具有一个名为'Counts'列的df之后):

    d = {}
    for i in df.index:
         x = np.arange(0, df['Counts'].loc[i]) +1
         d[i] = pd.DataFrame([[1]*len(x),], index= [i], columns = x)
         d[i].index = pd.MultiIndex.from_tuples(r[i].index.get_level_values(0))
         d[i] = d[i].stack()

    z = pd.concat(d.values(), axis=0)

虽然这是可行的,但效率不是很高,当我尝试对10万行进行采样时,会出现内存错误。用这种方法处理一个大文件有什么建议吗?你知道吗

感谢所有提供答案的人。我欢迎你的反馈。你知道吗

试试看cumcount

yyy = df.groupby(t.index).cumcount()+1

相关问题 更多 >