gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 17:13:21 25 4
gpt4 key购买 nike

我想改变一下。数据框:

    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

我想提取 2 个唯一siteBIOM 值,即 2008 年和 2013 年 YR 的 1 和 10,以便我得到这样的东西:

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

现在可能比您最初的循环想法更复杂,但我认为它以更复杂的方式使用 pandas 功能。

关于python - 从 pandas 数据框中提取多行并转换为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33882642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com