Python манипулирует данными временных рядов в агрегации - PullRequest
1 голос
/ 27 апреля 2019

У меня есть фрейм данных временных рядов, который содержит столбцы, как показано ниже:

    perf_date  pull_date  clicks  conv      rev 
    2019-01-21 2019-01-28   56     9        44.12
    2019-01-22 2019-01-28   56     10       44.70
               2019-01-29   56     10       44.70
    2019-01-23 2019-01-28   59     13       89.31
               2019-01-29   59     13       89.31
               2019-01-30   59     14       95.31

, что я хочу сделать: 1) Держать все значения строк первой строки для каждого perf_date.2) Добавьте значения дохода для наибольшей даты pull_date к каждой дате perf_date.Таким образом, после манипуляции приведенный выше фрейм данных должен выглядеть следующим образом:

    perf_date  pull_date  clicks  conv      rev 
    2019-01-21 2019-01-28   56     9        44.12
    2019-01-22 2019-01-28   56     10       44.70
    2019-01-23 2019-01-28   59     13       95.31

1 Ответ

1 голос
/ 27 апреля 2019

Используйте GroupBy.agg со словарем столбцов с агрегатными функциями - вы можете передать его вручную или динамически - все столбцы без perf_date и rev агрегируются по first и rev поlast:

#if necessary
df['perf_date'] = df['perf_date'].ffill()
df = df.sort_values(['perf_date','pull_date'])

d = dict.fromkeys(df.columns.difference(['perf_date','rev']), 'first')
d['rev'] = 'last'
print (d)
{'clicks': 'first', 'conv': 'first', 'pull_date': 'first', 'rev': 'last'}

df = df.groupby('perf_date', as_index=False).agg(d).reindex(df.columns, axis=1)
print (df)
    perf_date   pull_date  clicks  conv    rev
0  2019-01-21  2019-01-28      56     9  44.12
1  2019-01-22  2019-01-28      56    10  44.70
2  2019-01-23  2019-01-28      59    13  95.31

РЕДАКТИРОВАТЬ:

d = dict.fromkeys(df.columns.difference(['perf_date','rev']), 'first')
df1 = df.groupby('perf_date', as_index=False).agg(d)
s = df.groupby('perf_date')['rev'].nth(2)
df = df1.join(s, on='perf_date')
print (df)
    perf_date  clicks  conv   pull_date    rev
0  2019-01-21      56     9  2019-01-28    NaN
1  2019-01-22      56    10  2019-01-28    NaN
2  2019-01-23      59    13  2019-01-28  95.31
...