这个想法是根据一个列表来分配pandas列。
from pandas import DataFrame
time_window_order=['268','264','260','256','252','248','244','240']
df =DataFrame ({'time_window':['268','268','268','264','252','252','252','240'],'seq_no':[0,0,0,1,4,4,4,7]})
for idx,ord in enumerate(time_window_order):
df.loc[df['time_window'].isin([ord]), 'centre_point'] = idx
但是,我想知道是否有更有效或内置的熊猫方法。
您可以将列表转换为以位置作为值的字典。键将是列表中的值。然后做一个映射来得到结果。
from pandas import DataFrame
time_window_order=['268','264','260','256','252','248','244','240']
order_dict = {k:i for i,k in enumerate(time_window_order)}
df =DataFrame ({'time_window':['268','268','268','264','252','252','252','240'],'seq_no':[0,0,0,1,4,4,4,7]})
df['centre_point'] = df['time_window'].map(order_dict)
print (df)
它的输出将是:
time_window seq_no centre_point
0 268 0 0
1 268 0 0
2 268 0 0
3 264 1 1
4 252 4 4
5 252 4 4
6 252 4 4
7 240 7 7