首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Python分离Pandas DataFrame的元素

用Python分离Pandas DataFrame的元素
EN

Stack Overflow用户
提问于 2016-06-11 09:58:04
回答 1查看 100关注 0票数 1

我有一只熊猫DataFrame,看上去如下所示:

代码语言:javascript
运行
复制
    Time  Measurement
0      0            1
1      1            2
2      2            3
3      3            4
4      4            5
5      0            2
6      1            3
7      2            4
8      3            5
9      4            6
10     0            3
11     1            4
12     2            5
13     3            6
14     4            7
15     0            1
16     1            2
17     2            3
18     3            4
19     4            5
20     0            2
21     1            3
22     2            4
23     3            5
24     4            6
25     0            3
26     1            4
27     2            5
28     3            6
29     4            7

它可以使用以下代码生成:

代码语言:javascript
运行
复制
import pandas
time=[0,1,2,3,4]
repeat_1_conc_1=[1,2,3,4,5]
repeat_1_conc_2=[2,3,4,5,6]
repeat_1_conc_3=[3,4,5,6,7]
d1=pandas.DataFrame([time,repeat_1_conc_1]).transpose()
d2=pandas.DataFrame([time,repeat_1_conc_2]).transpose()
d3=pandas.DataFrame([time,repeat_1_conc_3]).transpose()
repeat_2_conc_1=[1,2,3,4,5]
repeat_2_conc_2=[2,3,4,5,6]
repeat_2_conc_3=[3,4,5,6,7]
d4=pandas.DataFrame([time,repeat_2_conc_1]).transpose()
d5=pandas.DataFrame([time,repeat_2_conc_2]).transpose()
d6=pandas.DataFrame([time,repeat_2_conc_3]).transpose()
df= pandas.concat([d1,d2,d3,d4,d5,d6]).reset_index()
df.drop('index',axis=1,inplace=True)
df.columns=['Time','Measurement']
print df

如果你看一下代码,你会发现我在同一个DataFrame中有两个实验重复,应该在df.iloc[:15]中分开。此外,在每个实验中,我有3个可以被认为类似剂量响应的起始条件的子实验,即第一次实验从1开始,第二次以2开始,第三次以3开始。这些实验应该以“`len(Time)”的指数间隔来分离,即每一次实验重复的0-4,5个元素。有谁能告诉我,在每个实验中,把这些数据分成单独的时间过程测量的最佳方法是什么?我不太清楚什么是最好的数据结构,但我只需要能够访问每个子实验的每个子实验的每一个实验重复容易。也许有时候是这样的:

代码语言:javascript
运行
复制
repeat1=
    Time  Measurement
0      0            1
1      1            2
2      2            3
3      3            4
4      4            5


5      0            2
6      1            3
7      2            4
8      3            5
9      4            6


10     0            3
11     1            4
12     2            5
13     3            6
14     4            7

Repeat 2=
      Time  Measurement
15     0            1
16     1            2
17     2            3
18     3            4
19     4            5


20     0            2
21     1            3
22     2            4
23     3            5
24     4            6


25     0            3
26     1            4
27     2            5
28     3            6
29     4            7
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-11 10:40:15

IIUC,您可以设置一个多索引,以便可以轻松地索引您的DF访问实验和子实验:

代码语言:javascript
运行
复制
In [261]: dfi = df.set_index([df.index//15+1, df.index//5 - df.index//15*3 + 1])

In [262]: dfi
Out[262]:
     Time  Measurement
1 1     0            1
  1     1            2
  1     2            3
  1     3            4
  1     4            5
  2     0            2
  2     1            3
  2     2            4
  2     3            5
  2     4            6
  3     0            3
  3     1            4
  3     2            5
  3     3            6
  3     4            7
2 1     0            1
  1     1            2
  1     2            3
  1     3            4
  1     4            5
  2     0            2
  2     1            3
  2     2            4
  2     3            5
  2     4            6
  3     0            3
  3     1            4
  3     2            5
  3     3            6
  3     4            7

选择子实验

代码语言:javascript
运行
复制
In [263]: dfi.loc[1,1]
Out[263]:
     Time  Measurement
1 1     0            1
  1     1            2
  1     2            3
  1     3            4
  1     4            5

In [264]: dfi.loc[2,2]
Out[264]:
     Time  Measurement
2 2     0            2
  2     1            3
  2     2            4
  2     3            5
  2     4            6

选择第二个实验和所有的子实验:

代码语言:javascript
运行
复制
In [266]: dfi.loc[2,:]
Out[266]:
   Time  Measurement
1     0            1
1     1            2
1     2            3
1     3            4
1     4            5
2     0            2
2     1            3
2     2            4
2     3            5
2     4            6
3     0            3
3     1            4
3     2            5
3     3            6
3     4            7

或者,您也可以创建自己的切片功能:

代码语言:javascript
运行
复制
def my_slice(rep=1, subexp=1):
    rep -= 1
    subexp -= 1
    return df.ix[rep*15 + subexp*5 : rep*15 + subexp*5 + 4, :]

演示:

代码语言:javascript
运行
复制
In [174]: my_slice(1,1)
Out[174]:
   Time  Measurement
0     0            1
1     1            2
2     2            3
3     3            4
4     4            5

In [175]: my_slice(2,1)
Out[175]:
    Time  Measurement
15     0            1
16     1            2
17     2            3
18     3            4
19     4            5

In [176]: my_slice(2,2)
Out[176]:
    Time  Measurement
20     0            2
21     1            3
22     2            4
23     3            5
24     4            6

PS更方便地连接DFs:

代码语言:javascript
运行
复制
df = pandas.concat([d1,d2,d3,d4,d5,d6], ignore_index=True)

所以您不需要下面的.reset_index()drop()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37762372

复制
相关文章

相似问题

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