熊猫如何通过数据框列值获取行索引
Posted
技术标签:
【中文标题】熊猫如何通过数据框列值获取行索引【英文标题】: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 等,我如何插入值并添加新列,以及由开始和结束操作定义的越来越多的循环。只是要强调一下,如果重叠,则希望创建新列或添加到现有的下一列(如果已经存在)。谢谢你的帮助
【问题讨论】:
【参考方案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。上面发布的新示例以上是关于熊猫如何通过数据框列值获取行索引的主要内容,如果未能解决你的问题,请参考以下文章