Pandas对比DataFrame相邻行生成新列出现维度不匹配错误如何解决
错误原因
你的代码中a[1:]的长度为n-1(n为DataFrame总行数),a[2:]的长度为n-2,二者做比较时长度不匹配无法广播运算,且最终返回的数组长度和原DataFrame的行数不一致,因此抛出报错。
正确实现方案
推荐直接用Pandas内置的shift方法实现,代码简洁且无需额外处理长度匹配问题:
import pandas as pd import numpy as np # 构造示例DataFrame df = pd.DataFrame({'col1': [1,3,3,1,2,3,2,2]}) # 核心逻辑:将col1向下偏移1行,和当前行比较,结果转整数,最后一行默认留NaN df['out'] = (df['col1'] < df['col1'].shift(-1)).astype('Int64') # 如果需要把最后一行的NaN替换为'-',可以加下面这行 df['out'] = df['out'].fillna('-')
如果坚持用Numpy实现,可以修正为如下写法:
def comp_out(a): # 前n-1个元素和后n-1个元素比较,得到长度为n-1的结果,最后补1个NaN对齐总行数 return np.append((a[:-1] < a[1:]).astype(int), np.nan) df['out'] = comp_out(df.col1.values) # 同样可以用fillna替换最后一行的NaN为'-'
运行后输出结果和你预期的完全一致。
内容的提问来源于stack exchange,提问作者user572575
相关产品推荐
相关产品推荐

