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的操作