Python 在聚合中操作时间序列数据
Python manipulate timeseries data in aggregation
我有一个时间序列数据框,其中包含如下所示的列:
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
将 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
我有一个时间序列数据框,其中包含如下所示的列:
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
将 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