【发布时间】:2020-03-05 16:37:52
【问题描述】:
我有下表
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
所以,我想以通用方式转换此表,以便我可以得到。此表可以包含更多条目,但我只显示它的一个 sn-p。
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
【问题讨论】:
-
尝试
m.set_index(['ID','Text','flag','Method'])['Result'].unstack().add_prefix('Method_').rename_axis(None,axis=1).reset_index()用于定义 m 的第一行之后的第二个数据帧,也可以阅读how to pivot a dataframe 上的这篇文章 -
感谢 anky_91 的帮助。它工作正常
标签: python database pandas reshape