我有下表
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的新手,所以我对此没有信心。感谢您的帮助。
您好,我有第二个UseCase:
假设我现在有更多类似的列:
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
答案 0 :(得分: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