熊猫:获得多重排序/分组查询的价值

时间:2014-09-09 13:39:07

标签: python pandas

我使用的是Python 2.6(公司要求)和Pandas 13.0。

我尝试从DataFrame中获取符合多个条件的值:

  • 获取值组合在一起的列的第一个和最后一个元素
  • 并在另一列中获取x的倍数。

这是一个例子来说明:

import pandas

df = pandas.DataFrame({
    'A' : [0.00, 0.10, 0.15, 0.20, 0.28,  0.30,  0.35,  0.43,  0.47,    0.5],
    'B' : [   1,    1,    1,    2,    2,     2,     3,     3,     3,      3],
    'C' : ['no', 'no', 'no', 'no', 'yes', 'yes', 'yes', 'yes', 'yes', 'yes'],
})

df.set_index(df['A'], inplace=True)

DataFrame提供:

in: print df

out:
     A     B   C
A                 
0.00  0.00  1   no
0.10  0.10  1   no
0.15  0.15  1   no
0.20  0.20  2   no
0.28  0.28  2  yes
0.30  0.30  2  yes
0.35  0.35  3  yes
0.43  0.43  3  yes
0.47  0.47  3  yes
0.50  0.50  3  yes

我想从过滤器中获取以下值:

  • 将df按B列分组,并获取该组中每个相同值的第一个和最后一个元素。
  • 将df按C列分组,并获取该组中每个相同值的第一个和最后一个元素。
  • 获取A列中0.1的倍数值

所以:

     A     B   C
A                 
0.00  0.00  1   no
0.10  0.10  1   no
0.20  0.20  2   no
0.28  0.28  2  yes
0.30  0.30  2  yes
0.35  0.35  3  yes
0.50  0.50  3  yes

我不知道如何以简单的方式获得此结果(避免循环)。 有人有任何想法吗?

任何帮助都会非常感激。

感谢。

1 个答案:

答案 0 :(得分:0)

在python 2.7和pandas 0.14上测试过,但我几乎可以肯定这对你的环境应该是相同的。使用示例数据框:

  • 将df分组为B列,并获取该组中每个相同值的第一个和最后一个元素。

    df.groupby('B').head(1)
    df.groupby('B').last()
    
  • 按照C列对df进行分组,并获取该组中每个相同值的第一个和最后一个元素:使用与上面相同的片段,但替换' B'为' C'

  • 获取A列中0.1的倍数值

    df[df.A % 0.1 == 0]