【问题标题】:Reshape panda dataframe in a specific way Part 3以特定方式重塑 pandas 数据框第 3 部分
【发布时间】: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


【解决方案1】:

您可以在添加 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

【讨论】:

  • 您好 anky_91,感谢您的快速回答。效果很好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
  • 2020-04-19
相关资源
最近更新 更多