按一列求和,按另一列对结果排序

2024-04-25 21:35:26 发布

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

我想让我的数据帧(见数据帧1)组的项目和总和销售金额,并按最早的销售日期(即见数据帧2)

Dataframe 1

Dataframe 2

到目前为止,我有以下代码:

cusips_df = cusips_df.sort_values(by='settle_date', ascending=True)

cusips_df = cusips_df.groupby(['cusip'], as_index=False).agg({"principal":sum})

但这会产生下面的数据帧(看起来它是按商品的字母顺序排列的,而不是按最早的销售日期排列的)

enter image description here


Tags: 数据项目代码truedfdatebysort
2条回答

您还可以在进行分组时聚合日期的最小值,然后按该最小值日期对组进行排序(如果需要,还可以从结果中删除日期列):

import numpy as np
import pandas as pd

d = { "Item" : ["Apple", "Apple", "Pear", "Pear", "Orange", "Orange"],
      "Amount": [1000, 2000, 30, 40, 400, 50],
      "DateSold": ["2018-02-01", "2018-06-01", "2018-01-01", "2018-02-20", "2018-04-15", "2018-04-30"]}
df = pd.DataFrame(data=d)
grouped_df = df.groupby(['Item'], as_index=False).agg({"Amount":np.sum, "DateSold":np.min})
grouped_and_sorted_df = grouped_df.sort_values('DateSold', ascending=True)[["Item","Amount"]]

在这个例子中df将是:

     Item  Amount    DateSold
0   Apple    1000  2018-02-01
1   Apple    2000  2018-06-01
2    Pear      30  2018-01-01
3    Pear      40  2018-02-20
4  Orange     400  2018-04-15
5  Orange      50  2018-04-30

grouped_and_sorted_df将是:

     Item  Amount
2    Pear      70
0   Apple    3000
1  Orange     450

试试这个

cusips_df['settle_date'] = pd.to_datetime(cusips_df['settle_date'], format='%d/%m/%Y')
cusips_df = cusips_df.groupby(['cusip'], as_index=False).agg({'principal':sum, 'settle_date': min}).sort_values('settle_date', ascending=True)[['cusip', 'principal']]

相关问题 更多 >