Я хочу сгруппировать dfx
по Branch
и Buyer
, получить строку, где Quantity
- среднее значение в каждом подфрейме данных, и вернуть окончательный фрейм данных. Как я могу сохранить соответствующее значение в столбце Date
?
dfx
:
Branch Buyer Quantity Date
0 A Carl 1 2013-01-01 13:00:00
1 A Mark 3 2013-01-01 13:05:00
2 A Carl 5 2013-10-01 20:00:00
3 A Carl 1 2013-10-02 10:00:00
4 A Joe 8 2013-10-01 20:00:00
5 A Joe 1 2013-10-02 10:00:00
6 A Joe 9 2013-12-02 12:00:00
7 B Carl 3 2013-12-02 14:00:00
Воспроизводимый образец:
dfx = pd.DataFrame({'Branch': 'A A A A A A A B'.split(),
'Buyer': 'Carl Mark Carl Carl Joe Joe Joe Carl'.split(),
'Quantity': [1, 3, 5, 1, 8, 1, 9, 3],
'Date': [
datetime.datetime(2013, 1, 1, 13, 0),
datetime.datetime(2013, 1, 1, 13, 5),
datetime.datetime(2013, 10, 1, 20, 0),
datetime.datetime(2013, 10, 2, 10, 0),
datetime.datetime(2013, 10, 1, 20, 0),
datetime.datetime(2013, 10, 2, 10, 0),
datetime.datetime(2013, 12, 2, 12, 0),
datetime.datetime(2013, 12, 2, 14, 0)]
})
Использование:
grouped1 = dfx.groupby(['Branch', 'Buyer'])
grouped1['Quantity'].apply(lambda x: x.iloc[0])
возвращается:
Branch Buyer
A Carl 1
Joe 8
Mark 3
B Carl 3
Name: Quantity, dtype: int64
, но не сохраняет Date
.
Ожидаемый результат для среднего значения в Quantity
:
Branch Buyer Quantity Date
0 A Carl 1 2013-01-01 13:00:00
1 A Mark 3 2013-01-01 13:05:00
4 A Joe 8 2013-10-01 20:00:00
7 B Carl 3 2013-12-02 14:00:00
Для (A,Carl)
есть только два уникальных значения 1
и 5
, но 1
появляется первым, поэтому сохраните это строка. (A,Joe)
имеет 8, 1, 9
, поэтому оставим строку со средним значением 8
. (A,Mark)
и (B,Carl)
содержат только одну строку, поэтому исходные данные сохраняются.