我有一个可以简化的数据框:
df = pd.DataFrame(index = ['01/11/2017', '01/11/2017', '01/11/2017', '02/11/2017', '02/11/2017', '02/11/2017'],
columns = ['Period','_A', '_B', '_C'] )
df.Period = [1, 2, 3, 1, 2, 3]
df
看起来像:
Date Period _A _B _C
01/11/2017 1 NaN NaN NaN
01/11/2017 2 NaN NaN NaN
01/11/2017 3 NaN NaN NaN
02/11/2017 1 NaN NaN NaN
02/11/2017 2 NaN NaN NaN
02/11/2017 3 NaN NaN NaN
我想将我的功能应用于每个单元格
Get_Y(Date, Period, Location)
(其中_A, _B, _C, ...
是位置)。
Get_Y
是一个复杂的函数,它使用Date,Period和Location从其他数据框中查找数据,并根据条件给出Y的值(0到1之间的浮点数)。
我已经成功地使用了iterrows:
for index, row in PeriodDF.iterrows():
date = index
Period = row.loc[row.index[0]]
LocationList = row.index[1:]
print(date, Period)
for Location in LocationList :
PeriodDF.loc[(PeriodDF.index == date)&(PeriodDF.Period == Period), Location] = Get_Y(date, Period, Location)
但这需要1个多小时。
必须有一种方法可以更快地在熊猫中做到这一点。
我尝试创建3个数据框,一个是Period
的数组,一个是Location
的数组,另一个是Date
,但不确定如何应用{{} 1}} elementwise,使用每个数据帧的值。