Pandas Groupby和基于列名的sum
我有一个数据帧:Pandas Groupby和基于列名的sum,pandas,columnheader,Pandas,Columnheader,我有一个数据帧: df = pd.DataFrame({ 'BU': ['AA', 'AA', 'AA', 'BB', 'BB', 'BB'], 'Line_Item': ['Revenues','EBT', 'Expenses', 'Revenues', 'EBT', 'Expenses'], '201901': [100, 120, 130, 200, 190, 210], '201902': [100, 120, 130, 200, 190, 210],
df = pd.DataFrame({
'BU': ['AA', 'AA', 'AA', 'BB', 'BB', 'BB'],
'Line_Item': ['Revenues','EBT', 'Expenses', 'Revenues', 'EBT', 'Expenses'],
'201901': [100, 120, 130, 200, 190, 210],
'201902': [100, 120, 130, 200, 190, 210],
'201903': [200, 250, 450, 120, 180, 190],
'202001': [200, 250, 450, 120, 180, 190],
'202002': [200, 250, 450, 120, 180, 190],
'202003': [200, 250, 450, 120, 180, 190]
})
这些列分别表示年和月。我想把几个月的栏目汇总成一个新的年度栏目。结果应如下所示:
df = pd.DataFrame({
'BU': ['AA', 'AA', 'AA', 'BB', 'BB', 'BB'],
'Line_Item': ['Revenues','EBT', 'Expenses', 'Revenues', 'EBT', 'Expenses'],
'201901': [100, 120, 130, 200, 190, 210],
'201902': [100, 120, 130, 200, 190, 210],
'201903': [200, 250, 450, 120, 180, 190],
'202001': [200, 250, 450, 120, 180, 190],
'202002': [200, 250, 450, 120, 180, 190],
'202003': [200, 250, 450, 120, 180, 190],
'2019': [400, 490, 710, 520, 560, 610],
'2020': [600, 750, 1350, 360, 540, 570]
})
我的实际数据集有若干年,每年有12个月。希望不必手动添加列。列的总和是否总是相同的?也就是说,是否总是有3个
2019
列具有相同的名称,以及3个2020
列具有相同的名称?如果是这样,您可以对这些新列进行硬编码
df['2019']=df['201901']+df['201902']+df['201903']
df['2020']=df['202001']+df['202002']+df['202003']
您求和的列是否总是相同的?也就是说,是否总是有3个2019
列具有相同的名称,以及3个2020
列具有相同的名称?如果是这样,您可以对这些新列进行硬编码
df['2019']=df['201901']+df['201902']+df['201903']
df['2020']=df['202001']+df['202002']+df['202003']
尝试创建包含年份列的数据框,并转换列名:
按年份列出的列和仅列出年份值的列:
data_df = (
data_df.resample('Y', axis=1).sum().rename(columns=lambda c: c.year)
)
然后返回到原始数据帧:
new_df = df.join(data_df)
new_df
:
BU Line_Item 201901 201902 201903 202001 202002 202003 2019 2020
0 AA Revenues 100 100 200 200 200 200 400 600
1 AA EBT 120 120 250 250 250 250 490 750
2 AA Expenses 130 130 450 450 450 450 710 1350
3 BB Revenues 200 200 120 120 120 120 520 360
4 BB EBT 190 190 180 180 180 180 560 540
5 BB Expenses 210 210 190 190 190 190 610 570
尝试创建包含年份列的数据框,并转换列名: 按年份列出的列和仅列出年份值的列:
data_df = (
data_df.resample('Y', axis=1).sum().rename(columns=lambda c: c.year)
)
然后返回到原始数据帧:
new_df = df.join(data_df)
new_df
:
BU Line_Item 201901 201902 201903 202001 202002 202003 2019 2020
0 AA Revenues 100 100 200 200 200 200 400 600
1 AA EBT 120 120 250 250 250 250 490 750
2 AA Expenses 130 130 450 450 450 450 710 1350
3 BB Revenues 200 200 120 120 120 120 520 360
4 BB EBT 190 190 180 180 180 180 560 540
5 BB Expenses 210 210 190 190 190 190 610 570
谢谢我的实际数据集相当大,有很多年,每年12个月。希望避免手动相加,谢谢。我的实际数据集相当大,有很多年,每年12个月。希望避免手动相加“
df.assign
似乎无法对列求和”意味着什么?它什么都没用?抛出错误(如果是,则发布回溯)?创建列,但结果错误?请发布您尝试过的代码,并解释为什么它不起作用。谢谢您的反馈。我将在稍后发布回溯。什么是“df.assign
似乎无法对列求和”的意思?它什么都没用?抛出错误(如果是,则发布回溯)?创建列,但结果错误?请发布您尝试过的代码,并解释为什么它不起作用。谢谢您的反馈。我将在稍后发布一个回溯。