在多索引列Pandas中将多个列与同一列相乘

时间:2017-05-13 19:27:10

标签: python pandas multi-index

我有这个数据框

col = pd.MultiIndex.from_arrays([['Jan', 'Jan', 'Jan', 'Cost'],
                                ['WK1', 'WK2', 'WK3', 'Cost']])
data = pd.DataFrame(np.random.randn(4, 4), columns=col)
data

我希望将Jan中的所有列与成本相乘,所以我尝试了这样的

data[['Jan']] * data[['Cost']]

但它充满了我的价值观。有没有办法可以做到这一点?

3 个答案:

答案 0 :(得分:2)

我认为您需要删除[]才能使用mul选择DataFrame

print (data['one'].mul(data['two']))

或者:

print (data['one'] * data['two'])

也可以使用函数xs

print (data.xs('one', axis=1, level=0) * data.xs('two', axis=1, level=0))

答案 1 :(得分:0)

根据我的猜测,您无法使用多级索引访问列。这是你想要做的吗?

data[('one','a')] * data[('two','b')]
Out[1065]: 
0    0.528834
1   -0.287322
2   -0.255244
3    0.871213
dtype: float64

答案 2 :(得分:0)

大家好,我做了一个循环回答我的问题

            @Override
            protected void populateViewHolder(final MessageViewHolder viewHolder, final Friends msg, int position) {


                online = FirebaseDatabase.getInstance().getReference().child("online").child(msg.friend_id);
                    userListener = online.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            Online online = dataSnapshot.getValue(Online.class);
                            if(online != null){
                                if (viewHolder.getDiff(online.timestamp) < 1){
                                    viewHolder.donline.setVisibility(View.VISIBLE);
                                    System.out.println("Is online");
                                } else {
                                    viewHolder.donline.setVisibility(View.GONE);
                                }
                            }

                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }

                    });


            }

        };

希望有人可以就我能改进的方式向我提供反馈