我的第一列是'年'。我的第二列是'银行'。我的最后一列是一个“值”。我想得到年=2003的每个'银行'的值的总和,并显示在一个新的列。即,如果我的开始 Dataframe 可以由以下代码表示:
df = pd.DataFrame({'year' : [2001, 2002, 2003, 2001, 2002, 2003, 2001, 2002, 2003, 2001, 2002, 2003],
'bank' : ['sbi', 'sbi', 'sbi', 'sbi', 'sbi', 'sbi', 'icici', 'icici', 'icici', 'icici', 'icici', 'icici'],
'amt' : [1000, 2000, 3000, 4000, 5000, 6000,1,2,3,4,5,6]
})
那么最终输出可以用下面的代码表示:
df = pd.DataFrame({'year' : [2001, 2002, 2003, 2001, 2002, 2003, 2001, 2002, 2003, 2001, 2002, 2003],
'bank' : ['sbi', 'sbi', 'sbi', 'sbi', 'sbi', 'sbi', 'icici', 'icici', 'icici', 'icici', 'icici', 'icici'],
'amt' : [1000, 2000, 3000, 4000, 5000, 6000,1,2,3,4,5,6],
'amt_2003': [9000, 9000, 9000, 9000, 9000, 9000, 9, 9, 9, 9, 9, 9]
})
ie -对于'sbi','year'= 2003中的总'value'为3000+6000=9000,它针对'sbi'的所有行显示。类似地,我针对'icci'的所有行得到9。
在使用groupby('bank')语句后,我无法使用条件求和。
2条答案
按热度按时间jhiyze9q1#
您可能需要执行
groupby.sum
,然后执行unstack
和merge
:输出:
中间体
df2
:要限制要保留的年份,请使用
loc
切片:输出:
0md85ypi2#
按
2003
的已筛选行使用Series.map
,按列amt
使用聚合sum
:或者使用
Series.where
将非2003
值替换为0
,并使用GroupBy.transform
替换新列:对于所有色谱柱,使用
DataFrame.pivot_table
与DataFrame.add_prefix
和DataFrame.join
: