Python Pandas 在索引上逐行使用 lambda
Python Pandas using lambda on index row by row
所以我尝试逐行将函数应用于索引,但遇到了一些问题
startDate = '2015-05-01 00:00'
endDate = '2015-05-08 00:00'
idx = pd.date_range(startDate, endDate, freq="1min")
df = pd.DataFrame(columns=['F(t)'])
df = df.reindex(idx, fill_value=0)
def circadian_function(T):
return math.cos(math.pi*(T-delta)/12)
到这里一切都很好,但我不确定要应用该功能
df['F(t)'] = df.index.apply(lambda x: circadian_function x[index].hour, axis=1)
我应该使用 lambda 吗?或者只是申请?
仅将应用用作最后结果。这可以很容易地矢量化。确保定义增量。
import numpy as np
df['F(t)'] = np.cos(np.pi*(idx.hour-delta)/12)
我没有 50 个代表,所以我不能评论@Ted Petrou 的回答;-;
我只是想说一些你应该知道的事情。
如果您要将 df.index.hour
填入 carcadian_function,请确保使用 numpy
而不是 math
。否则解释器将抛出一个 TypeError
(我刚刚发现这个)。
确保定义delta
.
示例:
import numpy as np
def circadian_function(T, delta):
return np.cos(np.pi * (T-delta) / 12)
@Ted Petrou 完全建议您做什么:
df['F(x)'] = circadian_function(df.index.hour, 0.5) #I picked an arbitrary delta
Numpy 会自动为您向量化函数。特德的道具我也学到了一些新东西:>
所以我尝试逐行将函数应用于索引,但遇到了一些问题
startDate = '2015-05-01 00:00'
endDate = '2015-05-08 00:00'
idx = pd.date_range(startDate, endDate, freq="1min")
df = pd.DataFrame(columns=['F(t)'])
df = df.reindex(idx, fill_value=0)
def circadian_function(T):
return math.cos(math.pi*(T-delta)/12)
到这里一切都很好,但我不确定要应用该功能
df['F(t)'] = df.index.apply(lambda x: circadian_function x[index].hour, axis=1)
我应该使用 lambda 吗?或者只是申请?
仅将应用用作最后结果。这可以很容易地矢量化。确保定义增量。
import numpy as np
df['F(t)'] = np.cos(np.pi*(idx.hour-delta)/12)
我没有 50 个代表,所以我不能评论@Ted Petrou 的回答;-; 我只是想说一些你应该知道的事情。
如果您要将
df.index.hour
填入 carcadian_function,请确保使用numpy
而不是math
。否则解释器将抛出一个TypeError
(我刚刚发现这个)。确保定义
delta
.
示例:
import numpy as np
def circadian_function(T, delta):
return np.cos(np.pi * (T-delta) / 12)
@Ted Petrou 完全建议您做什么:
df['F(x)'] = circadian_function(df.index.hour, 0.5) #I picked an arbitrary delta
Numpy 会自动为您向量化函数。特德的道具我也学到了一些新东西:>