我想要改变福利。数据文件:
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值,即YR 2008和2013年的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循环正确。
发布于 2015-11-23 23:54:20
我不确定你在这里需要一个循环。您可以简单地创建所需数据的一部分,设置索引,然后按如下方式展开:
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这可能比你最初的循环想法更复杂,但我认为它以更复杂的方式使用熊猫的功能。
https://stackoverflow.com/questions/33882642
复制相似问题