我有一个数据框,其中种类作为列,站点作为行。在每个单元格中,是我在该站点看到的每个物种的数量。例如
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)开始分组 例如
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]。
答案 0 :(得分:0)
尝试看看cumcount
yyy = df.groupby(t.index).cumcount()+1
答案 1 :(得分:0)
好吧,这就是我要做的事情(在将堆叠的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)
虽然这行得通,但效率不是很高,当我尝试对100k行进行采样时会遇到内存错误。有任何建议以这种方式处理巨型文件吗?
感谢所有提供答案的人。我欢迎您的反馈。