【问题标题】:create new dataframe grouped by one column and new columns创建按一列和新列分组的新数据框
【发布时间】:2017-04-02 06:06:31
【问题描述】:
import pandas as pd
import numpy as np

df = pd.DataFrame( {
   'A': ['d','d','d','f','f','f','g','g','g','h','h','h'],
   'B': [5,5,6,7,5,6,6,7,7,6,7,7],
   'C': [1,1,1,1,1,1,1,1,1,1,1,1],
   'S': [2012,2013,2014,2015,2016,2012,2013,2014,2015,2016,2012,2013]     
    } );

df

我想创建一个新的数据框,其中 A 列被分组,B 列和 C 列的总和显示在新列 2012、2013、2014、2015 和 2016 中。

【问题讨论】:

  • A B C S 0 d 5 1 2012 1 d 5 1 2013 2 d 6 1 2014 3 f 7 1 2015 4 f 5 1 2016 5 f 6 1 2012 6 g 6 1 2013 7 g 7 1 2014 8 克 7 1 2015 9 小时 6 1 2016 10 小时 7 1 2012 11 小时 7 1 2013

标签: python pandas dataframe


【解决方案1】:

您可以将groupbyunstack 一起使用:

df = (df.B + df.C).groupby([df.A, df.S]).sum().unstack(fill_value=0)
print (df)
S  2012  2013  2014  2015  2016
A                              
d     6     6     7     0     0
f     7     0     0     8     6
g     0     7     8     8     0
h     8     8     0     0     7

df['D'] = df.B + df.C

df = df.groupby(['A','S'])['D'].sum().unstack(fill_value=0)
print (df)
S  2012  2013  2014  2015  2016
A                              
d     6     6     7     0     0
f     7     0     0     8     6
g     0     7     8     8     0
h     8     8     0     0     7

pivot_table 的另一个解决方案:

df['D'] = df.B + df.C
df = df.pivot_table(index='A', columns='S', values = 'D', aggfunc='sum', fill_value=0)
print (df)
S  2012  2013  2014  2015  2016
A                              
d     6     6     7     0     0
f     7     0     0     8     6
g     0     7     8     8     0
h     8     8     0     0     7

【讨论】:

  • 感谢 jezrael,这行得通。但是,我确实对前一个问题还有另一个问题。如果我想让列在 Result 不是“H”时填写 -1,我该如何修改 np.where 函数? df3['利润'] = np.where(df3['结果'] == 'H', df3['列值H'],
  • 如果只想显示所有列> 0的行怎么办?
  • 抱歉,我离线了。我添加了您最新问题的答案。这是正确的吗?如果没有,您可以更换样品吗?
  • 谢谢,我编辑答案。和另一个一样,唯一的区别是|(或)改为&和。
  • 你好耶。如果我想添加 df = (df.B + df.C).groupby([df.A, df.S]).sum().unstack(fill_value=0 ),每年?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
相关资源
最近更新 更多