Python 如何将数据从数据帧的一列拆分为新数据帧的多列

Python 如何将数据从数据帧的一列拆分为新数据帧的多列,python,python-3.x,pandas,Python,Python 3.x,Pandas,我想从这个数据帧(我们称之为df1)分割数据: 因此,我创建了一个新的数据帧(我们称之为df2),如下所示: YEAR XXXX_DIFF ZZZZ_DIFF 2013 5.50 6.50 2014 4.50 3.50 df2 = df1[['YEAR','CODE','DIFF']].query('CODE == "XXXX"') 我想我是按年份分组,并将DIFF中的单列结果拆分为特定的代码匹配。我试过这样的方法: YEAR XXXX_DIF

我想从这个数据帧(我们称之为df1)分割数据:

因此,我创建了一个新的数据帧(我们称之为df2),如下所示:

YEAR   XXXX_DIFF   ZZZZ_DIFF
2013   5.50        6.50
2014   4.50        3.50
df2 = df1[['YEAR','CODE','DIFF']].query('CODE == "XXXX"')
我想我是按年份分组,并将DIFF中的单列结果拆分为特定的代码匹配。我试过这样的方法:

YEAR   XXXX_DIFF   ZZZZ_DIFF
2013   5.50        6.50
2014   4.50        3.50
df2 = df1[['YEAR','CODE','DIFF']].query('CODE == "XXXX"')
我知道我可以重命名列并删除多余的列,但我不确定如何将ZZZZ DIFF值传递到df2?

IIUC

 df = (df
       #I use the first method because groupby automatically sorts
       #the largest will be at the top
       #first method gets the first row for each group
       .groupby(['YEAR','CODE'],as_index=False)['DIFF'].first()
       .query('CODE.isin(["XXXX","ZZZZ"])')
       .pivot(index='YEAR', columns = 'CODE'))

 #this lumps the multiindex columns into one
 #the reversed method flips the positions to match ur expected output
 df.columns = ['_'.join(reversed(i)) for i in df.columns.to_flat_index()]

df.reset_index()

    YEAR    XXXX_DIFF   ZZZZ_DIFF
0   2013        5.5       6.5
1   2014        4.5       3.5
IIUC


可以先设置索引和取消堆栈,最后删除不需要的列级别并重命名

(
    df1.loc[df.CODE!='YYYY']
    .set_index(['YEAR', 'CODE'])
    .unstack()
    .pipe(lambda x: x.set_axis(x.columns.droplevel(0)+'_DIFF',
                               axis=1, inplace=False))
)


CODE    XXXX_DIFF   ZZZZ_DIFF
YEAR        
2013    5.5         6.5
2014    4.5         3.5

可以先设置索引和取消堆栈,最后删除不需要的列级别并重命名

(
    df1.loc[df.CODE!='YYYY']
    .set_index(['YEAR', 'CODE'])
    .unstack()
    .pipe(lambda x: x.set_axis(x.columns.droplevel(0)+'_DIFF',
                               axis=1, inplace=False))
)


CODE    XXXX_DIFF   ZZZZ_DIFF
YEAR        
2013    5.5         6.5
2014    4.5         3.5
使用++

out = (df.pivot(*df).filter(['XXXX','ZZZZ']).add_suffix('_DIFF')
                   .reset_index().rename_axis(None,axis=1))

使用++

out = (df.pivot(*df).filter(['XXXX','ZZZZ']).add_suffix('_DIFF')
                   .reset_index().rename_axis(None,axis=1))


对不起,周末的家庭义务。我要好好试一下,然后回应,两个脚踝咬伤的人要求我注意,这很困难:-)对不起,周末的家庭义务。我将尝试它们并做出适当的反应,两个脚踝咬伤者需要我的注意,这很困难:-)这非常有效,也是最容易理解的解决方案。非常感谢。这非常有效,也是最容易理解的解决方案。非常感谢。这个解决方案可行,但相当复杂。我对Python还是相当陌生的,因此需要更详细地研究它是如何工作的。非常感谢。这个解决方案可行,但相当复杂。我对Python还是相当陌生的,因此需要更详细地研究它是如何工作的。非常感谢。我无法让这个建议生效。它给了我一个错误,说“'Series'对象是可变的,因此它们不能被散列”,不幸的是,我还没有Python技能来解释为什么会出现这个错误。我无法让这个建议起作用。它给了我一个错误,说“'Series'对象是可变的,因此它们不能被散列”,不幸的是,我还没有Python技能来解释为什么会出现这个错误。