包含基于两个条件的列的新DataFrame

时间:2017-12-14 02:41:24

标签: python jupyter-notebook

我有一个包含以下列的数据框。

AA  BB  CC  DD  EE  FF  HH

我需要选择列"CT"BB的所有行,然后按列FF排序。

对于我的生活,我无法弄清楚如何做到这一点。 看起来很简单,但我错过了一些东西。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

要选择CT行,您可以使用

df[ df['BB'] == 'CT' ]

或者如果它可以是CT更长的字符串,即。 CTX

df[ df['BB'].str.contains('CT') ]

然后您可以使用sort_values()

对其进行排序
.sort_values('FF')

完整示例

import pandas as pd

data = {
    'AA': [1, 2, 3, 4, 5, 6, 7, 8],
    'BB': ["", "CT", "", "CT", "CT", "", "", "CT"],
    'CC': [1, 2, 3, 4, 5, 6, 7, 8],
    'DD': [1, 2, 3, 4, 5, 6, 7, 8],
    'EE': [1, 2, 3, 4, 5, 6, 7, 8],
    'FF': [0, 1, 0, 5, 2, 0, 0, 7],
    'HH': [1, 2, 3, 4, 5, 6, 7, 8],
}

df = pd.DataFrame(data)

print(df)

print(df[ df['BB'] == 'CT' ])
print(df[ df['BB'] == 'CT' ].sort_values('FF'))

开始时的数据

   AA  BB  CC  DD  EE  FF  HH
0   1       1   1   1   0   1
1   2  CT   2   2   2   1   2
2   3       3   3   3   0   3
3   4  CT   4   4   4   5   4
4   5  CT   5   5   5   2   5
5   6       6   6   6   0   6
6   7       7   7   7   0   7
7   8  CT   8   8   8   7   8

df[ df['BB'] == 'CT' ]之后

   AA  BB  CC  DD  EE  FF  HH
1   2  CT   2   2   2   1   2
3   4  CT   4   4   4   5   4
4   5  CT   5   5   5   2   5
7   8  CT   8   8   8   7   8

排序后

   AA  BB  CC  DD  EE  FF  HH
1   2  CT   2   2   2   1   2
4   5  CT   5   5   5   2   5
3   4  CT   4   4   4   5   4
7   8  CT   8   8   8   7   8

答案 1 :(得分:1)

这应该有效:

@Override
public void channelRead(final ChannelHandlerContext ctx, Object msg) {
    ByteBuf m = (ByteBuf) msg;
    m = safeBuffer(m, ctx.alloc());
    String str = m.toString(Charset.forName("UTF-8"));

    backendThreadPool.execute(new Runnable() {

        @Override
        public void run() {
            //System.out.println("Starting business logic operation at back_end.");
            synchronized(response) {
                int randomNum = ThreadLocalRandom.current().nextInt(1000, 2001);
                try {
                    Thread.currentThread().sleep(randomNum);

                } catch (InterruptedException e1) {
                    e1.printStackTrace();

                }
                response.setResponse(str);
                System.out.println("Finished at back_end.");
                response.notify();
                Thread.currentThread().interrupt();                 
            }
        }

    });


    String s = "Message returned from remote server through proxy : " + str;
    byte[] b = s.getBytes(Charset.forName("UTF-8"));
    defaultResponse.writeBytes(b);

    inboundChannel.writeAndFlush(defaultResponse).addListener(new ChannelFutureListener() {
        public void operationComplete(ChannelFuture future) throws Exception {
            if (future.isSuccess()) {
                ctx.channel().read();
            } else {
                future.channel().close();
            }
        }
    });
}