Python 创建按一列和新列分组的新数据帧

Python 创建按一列和新列分组的新数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我想创建一个新的数据框,其中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 g 7 1 2015 9 h 6 1 2016 10 h 7 1 2012 11 h 7 1 2013Hanks

我想创建一个新的数据框,其中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 g 7 1 2015 9 h 6 1 2016 10 h 7 1 2012 11 h 7 1 2013Hanks jezrael,本工程。不过,关于上一个问题,我还有另一个问题。如果我想在结果不是“H”时填写-1列,我如何修改np.where函数?df3['profit']=np.where(df3['Result']='H',df3['column value H'],如果只想显示所有列都大于0的行,该怎么办?对不起,我脱机了。我为你的最新问题添加了答案。正确吗?如果不正确,你能更改示例吗?谢谢,我编辑答案。它与另一个相同,唯一的区别是
(或)将更改为
&
和.hi jezrael。如果我想添加在df=(df.B+df.C)中求和的值的计数。groupby([df.A,df.S]).sum().unstack(fill_value=0),每年该怎么办?
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
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
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