Панды сгруппированы суммой по одному столбцу и упорядочить результаты по другому - PullRequest
0 голосов
/ 22 марта 2019

Я хочу, чтобы мой фрейм данных (см. Фрейм данных 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

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Вы можете дополнительно агрегировать минимальную дату даты при группировке, а затем сортировать группу по этой минимальной дате (и, если хотите, удалить столбец даты из результата):

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
0 голосов
/ 22 марта 2019

Попробуйте это

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']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...