我有一个数据帧:
| col1 | heading |
|--------|---------|
|heading1| true |
|abc | false |
|efg | false |
|hij | false |
|heading2| true |
|klm | false |
|... | false |
这个数据实际上是“连续的”,我想把它转换成这样的结构:
| col1 | Parent |
|---------------------
|heading1| heading1 |
|abc | heading1 |
|efg | heading1 |
|hij | heading1 |
|heading2| heading2 |
|klm | heading2 |
|... | headingN |
我有+10M行,因此此方法花费的时间太长:
df['Parent'] = df['col1']
for index, row in df.iterrows():
if row['heading']:
current = row['col1']
else:
row.loc[index, 'Parent'] = current
你对更快的程序有什么建议吗?你知道吗
可能不是一个非常惯用的解决方案,但是您可以
cumsum
逻辑列并使用它来获取每行的相应标题。本质上,我们定义的是一个分段常量索引数组,它只对原始heading
列上的每个True
值递增。你知道吗以上代码的输出是
从中可以
drop
不必要的heading
列。当然,您可以直接获取您拥有的逻辑阵列并使用它:我也想到了一件事。通过使用数据框弹出()我们要确保列也消失了。你知道吗
完整示例
退货:
可以将
mask
与ffill
一起使用:其工作原理是将任何不以
heading
开头的值替换为NaN
,然后向前填充最后一个非nan值:相关问题 更多 >
编程相关推荐