以特定方式重塑熊猫数据框,第3部分

问题描述 投票:1回答:1

我有下表

import pandas as pd

data = {'ID': [123, 123,124,124,125], 'Method': ['angular', 'square','angular','square','square'], 'Colour': ['red', 'blue','red','blue','blue'], 'Result': ['20', '30','10','5','13'] }

df = pd.DataFrame (data, columns = ['ID','Method','Colour','Result'])
df


ID  Method  Colour  Result
123 angular red       20
123 square  blue      30
124 angular red       10
124 square  blue       5
125 square  blue       13

因此,我希望以通用的方式转换此表,以便可以获取。该表可以包含更多条目,但我仅显示其摘要。

ID  Method_angular_red Method_square_blue 

123         20              30
124         10              5
125                         13

我知道我们可以使用unstack等,但是由于我是python的新手,所以我对此没有信心。感谢您的帮助。

你好,我有第二个用例:

假设我现在有更多的列,如:

import pandas as pd

data = {'ID': [123, 123,124,124,125], 'Text': ['A', 'A','B','B','C'],'flag': [0, 0,1,1,2],'Method': ['angular', 'square','angular','square','square'], 'Colour': ['red', 'blue','red','blue','blue'], 'Result': ['20', '30','10','5','13'] }

df = pd.DataFrame (data, columns = ['ID','Text','flag','Method','Colour','Result'])
df



ID  Text flag   Method  Colour  Result
123   A    0     angular    red       20
123   A    0      square    blue      30
124   B    1     angular    red       10
124   B    1      square    blue       5
125   C    2      square    blue       13

我想要一个flexibel脚本来分组或聚合第一列(可能是N列),然后像其他一样旋转其他列]

ID    Text flag  Method_angular_red Method_square_blue 

123     A    0          20              30
124     B    1          10              5
125     C    2                          13

我尝试使用以下代码,但会引发错误:

m = df.assign(Method=df['Method'].add('_'+df['Colour'])).drop('Colour',1)
out = m.pivot(*m).add_prefix('Method_').rename_axis(None,axis=1).reset_index()
out
python database pandas reshape
1个回答
2
投票

您可以在添加2列之后尝试df.pivot

m = df.assign(Method=df['Method'].add('_'+df['Colour'])).drop('Colour',1)
out = m.pivot(*m).add_prefix('Method_').rename_axis(None,axis=1).reset_index()
#or out = (m.pivot_table('Result','ID','Method',aggfunc=sum).rename_axis(None,axis=1)
#          .add_prefix('Method_').reset_index())

    ID Method_angular_red Method_square_blue
0  123                 20                 30
1  124                 10                  5
2  125                NaN                 13
© www.soinside.com 2019 - 2024. All rights reserved.