熊猫如何通过数据框列值获取行索引

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。上面发布的新示例

以上是关于熊猫如何通过数据框列值获取行索引的主要内容,如果未能解决你的问题,请参考以下文章

python, pyspark : 获取 pyspark 数据框列值的总和

如何从pyspark数据框列值中删除方括号

如何在熊猫数据框列中获取 NaN 观察的频率 [重复]

如何迭代熊猫数据框列中的元素?

确定熊猫数据框中的列值何时更改

如何从熊猫系列中获取包含行索引的列表[重复]