根据值条件连接行

时间:2016-11-27 16:44:01

标签: python pandas

假设Pandas DataFrame如下所示:

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

这样做的好方法是什么?我想过使用布尔索引来拼接包含 yearS2 bread 的行(删除行并提取值)。然后通过布尔索引再次查找相关行( yearS1 和相同的 bread ),以执行添加。这听起来像我认为可以更优雅地处理的许多工作。

2 个答案:

答案 0 :(得分:4)

您可以使用groupby。分组将在Year列的前4个字符和Bread列中完成,如下所示:

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

答案 1 :(得分:-1)

假设您的DataFrame位于df

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