繁体   English   中英

熊猫:加入由不同迭代组成的数据框

[英]Pandas: join dataframe composed by different iteration

我有一个数据框,其中多个数据系列具有2列(0,1)。 数据由测量的不同迭代组成。 数据的结构如下:

df = pd.DataFrame({
    0: ['user', 'x', 1, 4, 7, 10, 'user', 'x', 1, 4, 7, 10, 'user', 'x', 1, 4, 7, 10],
                   1: ['iteration=0', 'y',5, 7, 9, 12, 'iteration=1', 'y',20, 8, 12, 12, 'iteration=2', 'y',3, 17, 19, 112]
                  })
0   user    iteration=0
1   x   y
2   1   5
3   4   7
4   7   9
5   10  12
6   user    iteration=1
7   x   y
8   1   20
9   4   8
10  7   12
11  10  12
12  user    iteration=2
13  x   y
14  1   3
15  4   17
16  7   19
17  10  112

我想绘制按迭代分组的x vs y。

我正在尝试通过首先将单个数据帧创建为迭代并将其作为列来执行groupby来实现此目的:

1   x   y iteration
2   1   5   0
3   4   7   0
4   7   9   0
5   10  12  0
8   1   20  1
9   4   8   1
10  7   12  1
11  10  12  1
14  1   3   2
15  4   17  2
16  7   19  2
17  10  112 2

为了创建此联接的数据框,我实现了以下代码:

meta=df.loc[df[0]=='user']

lst=[]
ind=0
for index, row in meta.iterrows(): 
    if index==0: #continue to start loop from second value
        continue
    splitvalue = meta.loc[ind][1].split('=')[1]
    print  (splitvalue)
    temp=temp.iloc[ind:index]
    temp['iteration']=splitvalue
    ind=index
    lst.append(temp)

pd.concat(lst)


有没有一种方法可以创建此联接的数据框而不创建子数据框列表? 还是有一种方法可以直接从原始数据框中进行绘制?

您可以使用:

numeric=~pd.Series([isinstance(key,str) for key in df[0]])
iterations=df[1].where(df[1].str.contains('=').fillna(False)).ffill()
iterations=[int(key.replace('iteration=','')) for key in iterations]
df['iterations']=iterations
df=df.loc[numeric]
df.columns=['x','y','iteration']
df.reset_index(drop=True,inplace=True)
print(df)

     x    y  iteration
0    1    5          0
1    4    7          0
2    7    9          0
3   10   12          0
4    1   20          1
5    4    8          1
6    7   12          1
7   10   12          1
8    1    3          2
9    4   17          2
10   7   19          2
11  10  112          2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM