根据另一列的符号翻转标记pandas列

时间:2018-01-27 03:43:26

标签: python pandas

我有一个像这样的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中非常慢。

任何帮助?

2 个答案:

答案 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;
    }