我有一个像这样的pandas数据框:
Index High Low MA(5)-MA(20)
0 100 90 -1
1 101 91 -2
2 102 92 +1
3 99 88 +2
当MA(5) - MA(20)为正时,我希望得到最大值,而低点的最小值则为负值。
问题是我只想要局部最大值和最小值而不是全局值,因此,每次MA(5) - MA(20)的符号翻转时,必须重置最大值和最小值。
我不想使用for循环,因为它们在python中非常慢。
任何帮助?
答案 0 :(得分:3)
您可以使用GOOS="windows" GOARCH="386" CGO_ENABLED="1" CC="i686-w64-mingw32-gcc" go build -x
获取最后一列的标志。执行np.sign
操作,并使用groupby
相应地指定值。
np.where
v = np.sign(df['MA(5)-MA(20)']) < 1
g = df.groupby(v.ne(v.shift()).cumsum())
df['Maxima/Minima'] = np.where(
v, g.Low.transform('min'), g.High.transform('max')
)
您会注意到,行根据符号分配了本地最小值/最大值。
答案 1 :(得分:2)
这是你需要的吗?
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if(convertView == null){
LayoutInflater inf = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inf.inflate(R.layout.listview_outbox_messages_row, null);
//private inner class used to minimize the calls to "findViewById" method
holder = new ViewHolder();
holder.datetimeText = convertView.findViewById(R.id.outbox_msgSentTime);
holder.messageText = convertView.findViewById(R.id.outbox_msgText);
holder.receiverUsernameText = convertView.findViewById(R.id.outbox_msgReceiverUsername);
convertView.setTag(holder);
}
else {
holder = (ViewHolder)convertView.getTag();
}
SentMessageTemplate stu = sentMsgsList.get(position);
holder.datetimeText.setText(stu.getTimestamp());
holder.messageText.setText(stu.getMessageContent());
holder.receiverUsernameText.setText(stu.getMsgReceiver());
//click listener for delete button
btnDeleteMsg = convertView.findViewById(R.id.btn_deleteMsg_SMF);
btnDeleteMsg.setOnClickListener(this);
return convertView;
}