<p>可能不是一个非常惯用的解决方案,但是您可以<code>cumsum</code>逻辑列并使用它来获取每行的相应标题。本质上,我们定义的是一个分段常量索引数组,它只对原始<code>heading</code>列上的每个<code>True</code>值递增。你知道吗</p>
<pre><code>import pandas as pd
# set up some dummy data
df = pd.DataFrame({'heading': [True, False, False, False, True, False, False]},
index=['heading1', 'foo', 'bar', 'baz', 'heading2', 'quux', 'quuz'])
# get every 'heading' index
headings = df.index[df.heading]
# fetch which row corresponds to which 'heading'
indices = df.heading.cumsum() - 1
# fetch the actual headings for each row
df['parent'] = headings[indices]
print(df)
</code></pre>
<p>以上代码的输出是</p>
<pre><code> heading parent
heading1 True heading1
foo False heading1
bar False heading1
baz False heading1
heading2 True heading2
quux False heading2
quuz False heading2
</code></pre>
<p>从中可以<code>drop</code>不必要的<code>heading</code>列。当然,您可以直接获取您拥有的逻辑阵列并使用它:</p>
<pre><code>headline = df.index.str.startswith('heading') # bool Series
headings = df.index[headline]
indices = df.heading.cumsum() - 1
df['parent'] = headings[indices]
</code></pre>