Python 如何将数据从数据帧的一列拆分为新数据帧的多列
我想从这个数据帧(我们称之为df1)分割数据: 因此,我创建了一个新的数据帧(我们称之为df2),如下所示: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
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技能来解释为什么会出现这个错误。