Python 聚合数据帧,使一列只有一个值,但将其其他列值相加

Python 聚合数据帧,使一列只有一个值,但将其其他列值相加,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个熊猫数据框,因此: fruits = ['apple', 'apple', 'banana', 'banana', 'orange'] quantities = [10, 5, 20, 12, 25] products = pd.DataFrame({'Fruits': fruits, 'Amount': quantities}) 我要做的是聚合'Fruits'列,以便只包含 'apple', 'banana', and 'orange' 但他们的“数量”是加起来的,即 'apple

我有一个熊猫数据框,因此:

fruits = ['apple', 'apple', 'banana', 'banana', 'orange']
quantities = [10, 5, 20, 12, 25]
products = pd.DataFrame({'Fruits': fruits, 'Amount': quantities})
我要做的是聚合
'Fruits'
列,以便只包含

'apple', 'banana', and 'orange'
但他们的“数量”是加起来的,即

'apple'=15, 'banana'=32, and 'orange'=25. 
这将是新的数据帧


你应该考虑把词典编造如下:

my_dict = {}
for i,item in enumerate(fruits):
    if item in my_dict:
        my_dict[item] += quantities[i]
    else:
        my_dict[item] = quantities[i]
然后你可以简单地做:

products = pd.DataFrame({'Fruits': my_dict.keys(), 'Amount': my_dict.values()})

我希望有帮助。

< P> >你应该考虑编一本字典:

my_dict = {}
for i,item in enumerate(fruits):
    if item in my_dict:
        my_dict[item] += quantities[i]
    else:
        my_dict[item] = quantities[i]
然后你可以简单地做:

products = pd.DataFrame({'Fruits': my_dict.keys(), 'Amount': my_dict.values()})
我希望这会有所帮助。

您可以使用Groupby:

In [4]: products
Out[4]: 
   Amount  Fruits
0      10   apple
1       5   apple
2      20  banana
3      12  banana
4      25  orange

[5 rows x 2 columns]

In [5]: products.groupby('Fruits').sum()
Out[5]: 
        Amount
Fruits        
apple       15
banana      32
orange      25

[3 rows x 1 columns]
您可以使用Groupby:

In [4]: products
Out[4]: 
   Amount  Fruits
0      10   apple
1       5   apple
2      20  banana
3      12  banana
4      25  orange

[5 rows x 2 columns]

In [5]: products.groupby('Fruits').sum()
Out[5]: 
        Amount
Fruits        
apple       15
banana      32
orange      25

[3 rows x 1 columns]

无论是
dict.keys()
还是
dict.values()
都不能保证顺序。因此,这可能会使数据出错。@msvalkon,实际上,它给出了相对正确的值。我测试过了。但是,很好的捕获。当然,对于这个数据集。但是,当你有数百万的水果时,@ MsValkon,这并不是问题,因为字典的键保持了它们各自的价值。另外,当获取
时,列表将按原样返回。我还刚刚完成了1000多个元素的测试,非常有效。(我之所以能够检查,是因为我使用了创建值的新方法)这是一个问题,各个方法返回的键和值的顺序是任意的,在任何实际场景中都不能依赖它。下面是来自:dictionary对象的keys()方法以任意顺序返回dictionary中使用的所有键的列表。无论是
dict.keys()
还是
dict.values()
都不能保证顺序。因此,这可能会使数据出错。@msvalkon,实际上,它给出了相对正确的值。我测试过了。但是,很好的捕获。当然,对于这个数据集。但是,当你有数百万的水果时,@ MsValkon,这并不是问题,因为字典的键保持了它们各自的价值。另外,当获取
时,列表将按原样返回。我还刚刚完成了1000多个元素的测试,非常有效。(我之所以能够检查,是因为我使用了创建值的新方法)这是一个问题,各个方法返回的键和值的顺序是任意的,在任何实际场景中都不能依赖它。这是来自:dictionary对象的keys()方法以任意顺序返回dictionary中使用的所有键的列表。这很好,但是还有办法保留2列吗?如果需要,可以调用[5]的输出上的
reset\u index()
。我刚才对GroupBy中的选项执行了\u index=False这很好,但是,有没有办法仍然保留2列?如果需要,可以对[5]的输出调用
reset_index()
。我只是对groupby中的选项执行了设置为\u index=False的操作