根据列值选择数据子集

时间:2018-05-03 07:42:17

标签: python pandas dataframe

我在以下结构中有一个DataFrame
df

   12     14   15   16    18   29    31   32   33    36    46    48   49   50   52
0  0   1950  136  -25  -116    1  1664  372  -17   NaN     1  2950  449  -24  NaN
1  0   1635  373  -21  -115    0  1639  261  -24  -116     1  2950  160  -24  NaN
1  0   1635  373  -21  -115    1  1639  261  -24   NaN     1  2950  160  -24 -111
122946中的

我有指标01 我将这个指数列表命名为: col = [12,29,46] 我的目标是在Python中找到正确的语法来编写代码:

for i in col: 
    check df[i] 
    while df[i] == 0 and df [i+6] is not NaN:
        select df[i+2] , df[i+3] , df[i+4]
    while df[i] == 1 and df [i+6] is not NaN:
        select df[i+2] , df[i+3] , df[i+4]
    if df[i] == 1 and all df[i+6] are NaN:
    Select the first one.

1 个答案:

答案 0 :(得分:0)

在不太了解熊猫数据帧的细节的情况下,我会说你需要一般地解决这个问题。如果你想创建自己的实现,你应该创建一个过滤函数,你传递两个参数:你的数据帧和谓词函数(你应该写的函数,它将返回True或False)在一行数据帧上。)

类似的东西:

def my_test_function(row):
    ....
    # result must be boolean (or something equivalent)
    return result

def filter_dataframe(df, predicate):
   return [row for row in df.rows if predicate(row)]

rows = filter_dataframe(df, my_test_function)

因此,您必须根据自己的需要撰写my_test_function

另请注意,Panda提供了一整套过滤设施(see in particular this page)。但如果它不符合您的需求,上面的模式可能是一个优雅的解决方案。