我试图在名称以特定文本(例如:确定性)开头的列之前放置多个列(Score1、Score2、Score3等)
我可以使用以下命令在固定位置插入列:
df.insert(17, "Score1", " ")
添加一个列会更改列序列,因此我必须查看下一列的位置。我可以将空白列列表添加到CSV的末尾
所以本质上,我的理解是,我必须让pandas阅读列标题。如果标题文本以“确定”开头,则在其前面放置一个名为Score1的列
我尝试使用:
df.insert(df.filter(regex='Certainty').columns, "Score", " ")
然而,可以猜测,这是行不通的
据我所知,pandas在迭代方法方面效率不高?我在这里被误导了吗
写这篇文章也让我想到它需要一个记分1、2、3的计数器
如有任何建议,将不胜感激
提前谢谢
更新——基于提供的反馈
使用@SergeBallesta works的方法。
cur=0
for i, col in enumerate(df.columns):
if col.startswith('Certainty'):
df.insert(i+cur, f'Score{cur + 1}', '')
cur += 1
使用@jacosoli的方法 我需要做一个修改,允许它找到所有以“确定”开头的列。还需要自动添加分数1、分数2、分数3
版本1:这只会在正确的位置添加Score1,然后没有其他内容
counter=0
certcol = df.columns[df.columns.str.contains('Certainty')]
col_idx = df.columns.get_loc(certcol[0])
col_names = [f'Score{counter + 1}']
[df.insert(col_idx, col_name, ' ')
for col_name in col_names[::-1]]
版本2:这将在正确的位置添加Score1,然后在第一个“确定性”列之后添加其余的。因此,它不会继续寻找下一个。也许它需要一个for
循环
cur=0
certcol = df.columns[df.columns.str.contains('Certainty')]
for col in enumerate(certcol):
col_idx = df.columns.get_loc(certcol[0])
df.insert(cur+col_idx, f'Score{cur + 1}', '')
cur += 1
我已经发布了这篇文章,以防有人偶然发现同样的需求
您必须在列上进行迭代。它的性能不如numpy矢量化访问,但有时您别无选择:
在这里,我只想做:
您可以像下面这样找到
Certainty
列的位置然后,您可以像这样为每个新列和数据(这里只是示例中的空字符串)添加一个for循环
因此,只要添加新列的反向(
[::-1]
)列表,就不需要更新列索引。 如果您还没有,也可以看看this问题相关问题 更多 >
编程相关推荐