如何在Pandas DataFrame中合并不同类型列且无需逐行迭代?
无需逐行迭代生成新列的解决方案
当然有啦!Pandas的核心优势之一就是矢量化操作,完全不用手动写循环逐行处理,既简洁又高效。给你分享几种实用的方法:
方法1:完全矢量化字符串拼接(效率最高)
这种方法直接利用Pandas的列级操作,全程没有逐行迭代,是处理这类场景的最优解:
import pandas as pd df = pd.DataFrame({'col1':[0.2, 0.3, 0.5], 'col2':['a', 'b', 'c']}) # 把col1转为百分比字符串,再和col2拼接 df['col3'] = (df['col1'] * 100).astype(int).astype(str) + '% ' + df['col2']
执行后df['col3']就会得到你想要的['20% a', '30% b', '50% c']。原理是先把小数转成百分比数值,再转成字符串类型,最后和固定字符串'% '以及col2的内容拼接,所有操作都是在整个列上批量完成的。
方法2:用apply结合f-string(更灵活)
如果需要更复杂的格式化逻辑,用apply配合f-string会更直观——虽然apply(axis=1)是逐行处理,但Pandas内部做了优化,比手动写Python循环快很多:
df['col3'] = df.apply(lambda row: f"{row['col1']*100:.0f}% {row['col2']}", axis=1)
这里的:.0f表示把数值格式化为整数(去掉小数部分),如果你的数据有小数百分比(比如0.25对应25%),这个写法也能完美适配。
方法3:链式赋值(代码更简洁)
如果你喜欢链式操作的风格,可以用assign方法一次性完成新列的创建:
df = df.assign(col3=(df['col1']*100).astype(int).astype(str) + '% ' + df['col2'])
这种写法不需要单独修改原DataFrame,直接返回包含新列的新DataFrame,适合数据流式的代码风格。
总的来说,尽量避免手动写for循环遍历DataFrame,Pandas提供的矢量化方法不仅代码更简洁,在数据量大的时候性能提升会非常明显。
内容的提问来源于stack exchange,提问作者m33n
相关产品推荐
相关产品推荐

