【问题标题】:pandas how get row index by data frame column value熊猫如何通过数据框列值获取行索引
【发布时间】:2016-08-06 15:21:55
【问题描述】:

这是我的数据框。 我有“操作”列,这些列中的值定义了循环。例如 Operation = 4 定义循环的开始,持续时间为 1,而 Operation = 9 是循环的结束。对于 A2 和 A3 循环,依此类推。如果需要 A1、A2、A3 等,我如何插入值并添加新列,以及由开始和结束操作定义的越来越多的循环。只是要强调一下,如果重叠,则希望创建新列或添加到现有的下一列(如果已经存在)。谢谢你的帮助

【问题讨论】:

    标签: loops pandas indexing


    【解决方案1】:

    更新:

    In [136]: df
    Out[136]:
       a  b  c  operation
    0  8  7  5          1
    1  3  1  0          2
    2  5  4  0          3
    3  9  7  7          4
    4  4  6  8          5
    5  7  8  0          6
    6  1  8  8          7
    7  0  9  0          8
    8  9  9  7          9
    9  0  7  3         10
    
    In [137]: df['A1'] = ''
    
    In [138]: df.ix[(df.index >= df[df.operation == 4].index.tolist()) & \
       .....:       (df.index <= df[df.operation == 9].index.tolist()), 'A1'] = 1
    
    In [139]:
    
    In [139]:
    
    In [139]: df['A2'] = ''
    
    In [140]: df.ix[(df.index >= df[df.operation == 2].index.tolist()) & \
       .....:       (df.index <= df[df.operation == 7].index.tolist()), 'A2'] = 2
    
    In [141]: df
    Out[141]:
       a  b  c  operation A1 A2
    0  8  7  5          1
    1  3  1  0          2     2
    2  5  4  0          3     2
    3  9  7  7          4  1  2
    4  4  6  8          5  1  2
    5  7  8  0          6  1  2
    6  1  8  8          7  1  2
    7  0  9  0          8  1
    8  9  9  7          9  1
    9  0  7  3         10
    

    旧答案:

    In [93]: df
    Out[93]:
       a  b  c OPERATION
    0  1  1  0       op2
    1  1  5  6       op2
    2  7  7  2     START
    3  1  6  2       op2
    4  7  7  4       op2
    5  3  2  0       op2
    6  6  9  9       op1
    7  6  1  4       END
    8  5  3  6       op1
    9  9  2  9       op3
    
    In [94]: df[(df.index >= df[df.OPERATION == 'START'].index.tolist()) & \
       ....:    (df.index <= df[df.OPERATION == 'END'].index.tolist())]
    Out[94]:
       a  b  c OPERATION
    2  7  7  2     START
    3  1  6  2       op2
    4  7  7  4       op2
    5  3  2  0       op2
    6  6  9  9       op1
    7  6  1  4       END
    

    解释:

    In [53]: df.OPERATION == 'START'
    Out[53]:
    0    False
    1    False
    2     True
    3    False
    4    False
    5    False
    6    False
    7    False
    8    False
    9    False
    Name: OPERATION, dtype: bool
    
    In [54]: df[df.OPERATION == 'START'].index.tolist()
    Out[54]: [2]
    
    In [55]: df.index >= df[df.OPERATION == 'START'].index.tolist()
    Out[55]: array([False, False,  True,  True,  True,  True,  True,  True,  True,  True], dtype=bool)
    

    【讨论】:

    • 非常感谢。因此,如果我想在 START 和 END 之间添加新列“A”值 x,我该怎么做?谢谢
    • @Felix,我不明白您想在新列中添加什么值。 other 行呢?或者您是否想要另一个 DF 副本,其中 START 和 END 之间的行?您能否使用示例输入数据集(文本/CSV/dict/JSO/pickle 形式的 5-7 行)更新您的问题并发布所需的输出?
    • 非常感谢,马克斯。我做了更复杂的例子。我只想创建 A2 和 A3,以防我在 A1 中有重叠。例如,启动操作 12 并完成操作 14 的 A3 循环持续时间为 8,我更喜欢放入 A1。上面发布的新示例
    猜你喜欢
    • 2022-08-07
    • 2021-01-19
    • 1970-01-01
    • 2021-10-03
    • 2015-06-13
    • 2021-12-28
    • 2023-02-10
    • 2013-04-12
    相关资源
    最近更新 更多