我有成千上万行的DataFrame。其结构如下
A B C D
0 q 20 'f' 1 q 14 'd' 2 o 20 'a'
我想比较当前行和下一行的A列。如果这些值相等,我想将具有较低值的B列的值添加到具有较大值的比较行的D列中。然后,我要删除列B的移动列值。这就像一个交换过程。
A B C D
0 q 20 'f' 14 1 o 20 'a'
我有数千行,而iloc,loc在方法上运行缓慢。至少我想使用DataFrame apply方法。我尝试了一些代码示例,但是它们没有用。
我想做如下事情:DataFrame.apply(lambda row:self.compare(row,next(row)),axis = 1))
我有一个compare方法,但无法将下一行传递给compare方法。如何将其传递给方法?我也乐于听到更快的熊猫解决方案。
问题来源:stackoverflow
最好不要用apply
来做,因为那样会很慢。你可以看看使用shift
,例如
df['A_shift'] = df['A'].shift(1)
df['Is_Same'] = 0
df.loc[df.A_shift == df.A, 'Is_Same'] = 1
如果要在组内进行转换,会变得有些复杂,但仍然可以实现。
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。