繁体   English   中英

从pandas数据框中提取多行并转换为列

[英]Extracting multiple rows from pandas dataframe and converting to columns

我想改变这种感觉。 数据帧:

    index    YR   BIOM   RWT site
0       0  2008   0.53  0.20    1
1       1  2009   3.23  1.18    1
2       2  2010  11.51  3.94    1
3       3  2011  18.14  5.82    1
4       4  2012  22.88  6.73    1
5       5  2013  26.65  7.20    1
6       0  2008   0.39  0.15   10
7       1  2009   2.43  0.90   10
8       2  2010   8.95  3.09   10
9       3  2011  16.63  5.38   10
10      4  2012  24.36  7.23   10
11      5  2013  29.72  8.10   10

我想提取BIOM值的两个独特的site ,即1和10的YR 2008年和2013年,使我得到这样的:

index    BIOM_2008     BIOM_2013    site
0         0.53         26.65        1
1         26.65        29.72        10

这就是我在做什么:

lst_yrs = [2008, 2013]
sub_df = df[['YR', 'BIOM', 'site']]

for yr in lst_yrs:
    sub_df['BIOM'+str(yr)] = sub_df.loc['YR' == yr] 

不确定如何正确获取for循环。

我不确定您是否需要在此处循环。 您可以简单地创建所需数据的一部分,设置索引,然后按如下所示进行堆栈:

import pandas as pd

DF = pd.DataFrame({
'site' : [1, 1, 1, 1, 1, 1, 10, 10, 10],
'BIOM' : [0.53, 3.23, 11.51, 18.14, 22.88, 26.65, 0.39, 2.43, 8.95],
'YR'   : ['2008', '2009', '2010', '2011', '2012', '2013', '2008', '2009', '2010']
                  })

slice = DF[(DF['site'].isin([1, 10]) & DF['YR'].isin(['2008', '2013']))]

result = slice.set_index(['site','YR']).unstack('YR')

给出以下内容:

      BIOM       
YR    2008   2013
site             
1     0.53  26.65
10    0.39    NaN

为了回应您的评论,要展平层次结构列索引,请执行以下操作:

result.columns = [' '.join(col).strip() for col in result.columns.values]


   site  BIOM 2008  BIOM 2013
0     1       0.53      26.65
1    10       0.39        NaN

可能现在这比您原来的循环想法更复杂,但我认为它以更复杂的方式使用了熊猫功能。

暂无
暂无

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

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