我想計算某些時間序列或列的特徵,如果需要的話。使用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