我想计算某些时间序列或列的特征,如果需要的话。使用pd.DataFrame.agg创建特征向量
我知道我可以使用pandas.DataFrame.agg
,但我似乎无法为DataFrame的结果列/行提供自定义名称。
下面的代码做什么,我想:
注:这只是一个例子。我知道我可以通过
['sum', 'std', 'mean']
等agg,但我想这样做任意聚合函数。
import pandas as pd
import numpy as np
n_series = 5
n_time_samples = 10
data = np.random.rand(n_time_samples, n_series)
columns = ['s{:d}'.format(i) for i in range(n_series)]
df = pd.DataFrame(data, columns=columns)
df.agg([lambda x: x.mean(),
lambda x: x.std()], axis=0).T
的结果为每个时间序列的特征向量:
<lambda> <lambda>
s0 0.406411 0.330624
s1 0.446666 0.301839
s2 0.498958 0.159052
s3 0.613881 0.353684
s4 0.455623 0.287457
不过,我想有一个合适的名字为特色。这是不可能通过一本字典,为了做到这一点:
# Throws KeyError
df.agg({'f1': lambda x: x.mean(),
'f2': lambda x: x.std()}, axis=0).T
我知道我可以通过设置df.columns
重命名列,但我想知道如果我能解决这个问题只能用agg
。
补充说明:设置axis=1
也将失败:
df.agg([lambda x: x.mean(),
lambda x: x.std()], axis=1).T
这将引发
TypeError: ("'list' object is not callable", 'occurred at index 0')
但
# Note transpose
df.T.agg([lambda x: x.mean(),
lambda x: x.std()], axis=0).T
是否行得通呢?
@Zero是我知道的选项,但我希望能够做到这一点的任意函数。 – displayname