基于值条件连接行

2024-10-01 09:20:49 发布

您现在位置:Python中文网/ 问答频道 /正文

假设数据帧如下所示:

Year         Bread     Amount
-----------------------------
2008S1       white        50
2008S1       brown        30
2008S2       white        60
2008S2       brown        90
2009S1       brown       100
2009S1      golden      2000
2009S2       brown        20
2009S2      golden      1000

我希望加入相关的年份/面包组合,使金额加在一起。可以假设每年+面包组合都是独一无二的。结果是:

Year         Bread     Amount
-----------------------------
2008         white       110
2008         brown       120
2009         brown       120
2009        golden      3000

有什么好办法?我考虑使用布尔索引来拼接包含yearS2bread的行(删除行并提取值)。然后通过布尔索引再次查找相关行(yearS1和samebread),以执行加法。这听起来像是很多工作,我认为可以处理得更优雅。你知道吗


Tags: 数据金额amountyearwhite年份办法brown
2条回答

你可以使用groupby。将对年份栏和面包栏的前4个字符进行分组,如下所示:

df.groupby([df['Year'].str[:4], 'Bread']).sum()
Out: 
             Amount
Year Bread         
2008 brown      120
     white      110
2009 brown      120
     golden    3000

或作为常规列:

df.groupby([df['Year'].str[:4], 'Bread'], as_index=False).sum()
Out: 
    Bread  Amount
0   brown     120
1   white     110
2   brown     120
3  golden    3000

假设您的数据帧在df中

df.groupby(['year','bread'])['amount'].sum().reset_index()

相关问题 更多 >