Pandas:在两个DataFrame间拆分并复制列值
解决Pandas DataFrame按位置拆分列赋值的问题
这问题其实挺常见的,核心就是避开Pandas默认的索引对齐机制,直接按位置把Old的Values列拆分成New的两列就行。下面给你两种简单可靠的实现方式,附示例演示:
方法一:用.values绕过索引对齐
直接把截取后的Series转换成numpy数组,这样Pandas就不会按索引匹配,而是严格按位置顺序赋值:
import pandas as pd # 构造示例数据(用6行/3行模拟你的96行/48行场景) Old = pd.DataFrame({'Values': [1,2,3,40,50,60]}) New = pd.DataFrame(index=range(3), columns=['First', 'Second']) # 前48行(示例中是前3行)赋值给First列 New['First'] = Old['Values'].iloc[:48].values # 后48行(示例中是后3行)赋值给Second列 New['Second'] = Old['Values'].iloc[48:].values
执行后New的结果完全符合预期:
First Second 0 1 40 1 2 50 2 3 60
方法二:重置索引后赋值
如果不想依赖numpy数组,也可以给截取后的Series重置索引(丢弃原索引),让它和New的索引完全匹配:
# 前48行重置索引后赋值 New['First'] = Old['Values'].iloc[:48].reset_index(drop=True) # 后48行重置索引后赋值 New['Second'] = Old['Values'].iloc[48:].reset_index(drop=True)
为什么直接赋值会出问题?
Pandas默认会根据索引对齐数据——如果Old的索引和New的索引不完全匹配(比如Old的索引是不连续、非顺序的),直接赋值就会出现NaN或者错位的情况。而上面两种方法都是强制按位置而非索引来对应数据,完美解决这个问题。
内容的提问来源于stack exchange,提问作者Alasdair
相关产品推荐
相关产品推荐

