【发布时间】:2018-07-10 13:34:15
【问题描述】:
我有一个 Trend_1 、 Trend_2 、 Trend_3 ....到 Trend_2_3。从那我想运行一个返回信号的函数。该功能运行良好,只是我必须多次重复以下代码但只是更改名称。代码相同,只是我必须从 df['Signal_1'] 重复到 df['Signal_2_3']手动。只是想知道任何其他可以返回可以立即读取趋势列的函数的方法
这是我的函数代码,它返回一个信号_1 到信号_2_3
def Signal_processing(df):
signal_1= [None]
for i in range (1,len(df)):
if df['Trend_1'][i]== 'Up' and df['Trend_1'][i] != df['Trend_1'][i-1]:
signal_1 += ['Buy']
elif df['Trend_1'][i] =='Down' and df['Trend_1'][i]!= df['Trend_1'][i-1]:
signal_1 += ['Sell']
else :
signal_1 += [None]
df['Signal_1'] = signal_1
index=[]
bs=[]
for i in range (len(df)):
if df['Signal_1'][i] == 'Buy' or df['Signal_1'][i] == 'Sell':
bs.append(df['Signal_1'][i])
index.append(i)
for i in range (1,len(bs)):
if bs[i] == bs[i-1]:
df['Signal_1'][index[i]]='None'
这样的代码将重复 7 次,只是名称不同。
signal_7=[None]
for i in range (1,len(df)):
if df['Trend_2_3'][i]=='Up' and df['Trend_2_3'][i]!= df['Trend_2_3'][i-1] :
signal_7 += ['Buy']
elif df['Trend_2_3'][i] == 'Down' and df['Trend_2_3'][i]!= df['Trend_2_3'] [i-1]:
signal_7 += ['Sell']
else:
signal_7 += [None]
df['Signal_2_3'] = signal_7
index=[]
bs=[]
for i in range (len(df)):
if df['Signal_2_3'][i] == 'Buy' or df['Signal_2_3'][i] == 'Sell':
bs.append(df['Signal_2_3'][i])
index.append(i)
for i in range (1,len(bs)):
if bs[i] == bs[i-1]:
df['Signal_2_3'][index[i]]='None'
return df
【问题讨论】:
-
您说“这样的代码将重复 7 次,但名称不同。”,您的意思是 'Trend_1' ...等吗?如果是这样,您是否考虑过将该代码放入函数中并添加参数“名称”?
-
这意味着我手动重复代码,但只有 df['Trend_1'] 将更改为 df['Trend_2']、df['Trend_3'] 等。代码相同除了 df['Trend_1'] 将从 df['Trend_1'] 重复到 df['Trend_7']
-
df是熊猫数据框吗?无论df是什么,大多数数据对象都允许您获取列列表,以便在不知道列名的情况下迭代它们。当前接受的答案将起作用,但如果您添加新列或删除现有列,您的代码将中断。如果您动态地遍历列,则不会。
标签: python python-3.x python-2.7 function loops