查找pandas.DataFrame中下一个值组的行号

时间:2019-03-01 07:38:48

标签: python pandas dataframe

我有一个数据框,其值分组如下:

import pandas
A = pandas.DataFrame([['a',0],['b',1],['ba',1],['c',2],['cd',2],columns=['value','group'],index=[22,23,11,12,13])
A
Out[28]: 
   value  group
22     a      0
23     b      1
11    ba      1
12     c      2
13    cd      2

我跟踪有关组的行号:

current_row_index = 1
current_group = A['group'].values[current_row_index]
current_group
Out[31]: 1

现在,我想跳到与下一组相对应的行号。我知道我可以通过将pandas数据框转换为列表来做到这一点:

list(A['group']==current_group+1).index(True)
Out[32]: 3

我很想在不同的数据类型pandas.DataFramelist之间跳转,因此我想找到一种pandas的方法来查找与下一个行号相对应的第一个行号组。

2 个答案:

答案 0 :(得分:1)

import pandas as pd
from datetime import datetime


A = pd.DataFrame([['a',0],['b',1],['ba',1],['c',2],['cd',2]],columns=['value','group'],index=[22,23,11,12,13])

A = A.reset_index()

def get_first_row_index(g):
    g['first_index'] = g.index.values.tolist()[0]
    return g

A = A.groupby('group').apply(lambda g: get_first_row_index(g))

OUT

   index value  group  first_index
0     22     a      0            0
1     23     b      1            1
2     11    ba      1            1
3     12     c      2            3
4     13    cd      2            3

答案 1 :(得分:1)

以您的示例为例,我假设您需要行号(而不是行索引)。 您可以使用numpy

current_group = 1
indices = np.where(A.group == current_group+1)[0]

输出:

array([3, 4], dtype=int64)