我有中等大小的df(600K乘40),我试图将元素明智(通过索引)系列值加在一起,然后创建一个带有后续值的新列。但是,它需要超过24小时,但尚未完成。
Series1 = df.loc[df['ColumnX'] == 5, 'ColumnY']
Series2 = df.loc[df['ColumnX'] == 6, 'ColumnY']
df['column1plus2'] = Series1 + Series2
在弱中型服务器上计算是不是需要超过24小时,如果是的话?我做了一些根本错误的事情吗?
答案 0 :(得分:0)
由于您选择的互斥性(5对6),Series1
中所有行的索引与所有的索引不同Series2
中的行。运算符+
使用数据对齐来查找匹配的行,但不能。因此,它会使用NaN
的值创建匹配的虚拟对象,并将它们添加到系列中的值。 (当然,结果也是NaN
。)例如,如果Series1
中有第10行(例如3.14的值),则不会有相同的行Series2
中的号码。 Pandas将在Series2
中创建第10行,并将其值设置为NaN
,因为它不知道更好。第10行中求和的结果现在是3.14+NaN=NaN
。
这解释了为什么您的代码错误,但不一定是为什么它的速度很慢。我猜想在存在这么多缺失值的情况下,数据对齐是一个非常慢的操作。
你的意思是堆叠Series1
和Series2
而不是算术地添加它们吗?如果是这样,您应该pd.concat[Stack1,Stack2])
。